Ssl

使用 ssh-keygen -t rsa 時,密鑰使用什麼編碼?

  • January 9, 2019

當我執行時:

ssh-keygen -t rsa

要在 id_rsa.pub 和 id_rsa 等文件中生成公鑰/私鑰對,我的理解是公鑰編碼一個質數 p,而私鑰編碼一個數字 pq。但是當我打開這些文件時,我看不到人類可讀的數字,我看到的是字元序列。所以我的問題很簡單:我在看什麼?這些字元是否可以直接映射到數字,如果可以,通過什麼約定/算法/編碼?

ssl密鑰(私有和公共)通常以所謂的PEM 格式儲存。

Privacy-Enhanced Mail (PEM) 是一種事實上的文件格式,用於儲存和發送加密密鑰、證書和其他數據,它基於一組定義“隱私增強郵件”的 1993 IETF 標準。雖然最初的標準從未被廣泛採用,並被 PGP 和 S/MIME 取代,但他們定義的文本編碼變得非常流行。PEM 格式最終由 IETF 在 RFC 7468 中正式化。

這種格式實際上是頁眉,然後是base64編碼的二進制數據和頁腳。

Base64 是一組類似的二進製到文本編碼方案,通過將其轉換為 radix-64 表示形式,以 ASCII 字元串格式表示二進制數據。Base64 一詞源自特定的 MIME 內容傳輸編碼。每個 Base64 數字正好代表 6 位數據。因此,三個 8 位字節(即總共 24 位)可以由四個 6 位 Base64 數字表示。

對於ssh密鑰,請從 dave_thompson_085 評論中查看以下內容:

注意 ssh-keygen 使用(幾種)PEM 格式,但從不使用 7468 中的那種。過去,對於 RSA,它預設為 OpenSSL 的兩種“傳統”(又名“舊版”)格式,或者未加密,除了包含PKCS1,或密碼加密的類似 1421 的 Proc-type 和 DEK-Info 以及加密 PKCS1 的 base64,但不是類似 7468。從 7.8 開始,它預設為 OpenSSH 自己的“新格式”(之前由選項 -o 呼叫),類似於 7468,但內容完全不同(XDR 樣式而不是 ASN.1)。在幾個堆棧上已經有很多關於這些的問題。

OpenSSH 公鑰格式從來都不是 PEM(儘管商業 ‘SSH2’ 之類的),只是 SSH 有線格式的 base64。最近有人提醒我,這個 Q/A相當徹底地涵蓋了私鑰格式

引用自:https://unix.stackexchange.com/questions/492704