SSL 私鑰文件格式是什麼?
我正在研究如何使用 RSA 加密。我了解所有內容,但不了解私鑰的格式。
在 phpseclib(PHP 中的 RSA)中,您可以導入您的私鑰(private.key 格式),並且在密鑰文件中有如下文本:
-----BEGIN RSA PRIVATE KEY----- MIIBOQIBAAJBAIOLepgdqXrM07O4dV/nJ5gSA12jcjBeBXK5mZO7Gc778HuvhJi+ RvqhSi82EuN9sHPx1iQqaCuXuS1vpuqvYiUCAwEAAQJATRDbCuFd2EbFxGXNxhjL loj/Fc3a6UE8GeFoeydDUIJjWifbCAQsptSPIT5vhcudZgWEMDSXrIn79nXvyPy5 BQIhAPU+XwrLGy0Hd4Roug+9IRMrlu0gtSvTJRWQ/b7m0fbfAiEAiVB7bUMynZf4 SwVJ8NAF4AikBmYxOJPUxnPjEp8D23sCIA3ZcNqWL7myQ0CZ/W/oGVcQzhwkDbck 3GJEZuAB/vd3AiASmnvOZs9BuKgkCdhlrtlM6/7E+y1p++VU6bh2+mI8ZwIgf4Qh u+zYCJfIjtJJpH1lHZW+A60iThKtezaCk7FiAC4= -----END RSA PRIVATE KEY-----
但是當我用 Base64 解碼然後將其轉換為十進制時,它只是一個數字……我認為你需要兩者 $ p $ 和 $ q $ !我的問題:
如果我擲骰子(0 和 1)1024 次並找到最接近的素數,那將是我的 $ p $ 我會再次做這個過程,所以我得到 $ q $ ,但是如何將這些數字轉換為 private.key 格式?有什麼區別?
將該密鑰複製/粘貼到http://phpseclib.sourceforge.net/x509/asn1parse.php中,您會看到其中有幾個不同的整數。 $ p $ 有沒有, $ q $ 是否存在指數和其他幾個整數來利用中國剩餘定理加快速度。
密鑰使用 DER 進行編碼,並通過 ASN.1 派生語義。以下網址詳細說明:
https://datatracker.ietf.org/doc/html/rfc8017#appendix-C
引用我了解 RSA 加密的數學: ~/.ssh 中的文件與理論有何關係?:
該 DER 編碼字元串的 ASN.1 語法在 RFC8017(又名PKCS1)中進行了描述:
Version ::= INTEGER { two-prime(0), multi(1) } (CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --}) RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL }
DER 編碼使用標籤長度值表示法。所以這是一個範例私鑰:
-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5 1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh 3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2 pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0= -----END RSA PRIVATE KEY-----
這是十六進制編碼:
3082025c02010002818100aa18aba43b50deef38598faf87d2ab634e4571c130a9bca7b878267414 faab8b471bd8965f5c9fc3818485eaf529c26246f3055064a8de19c8c338be5496cbaeb059dc0b35 8143b44a35449eb264113121a455bd7fde3fac919e94b56fb9bb4f651cdb23ead439d6cd523eb081 91e75b35fd13a7419b3090f24787bd4f4e196702030100010281801628e4a39ebea86c8df0cd1157 2691017cfefb14ea1c12e1dedc7856032dad0f961200a38684f0a36dca30102e2464989d19a80593 3794c7d329ebc890089d3c4c6f602766e5d62add74e82e490bbf92f6a482153853031be2844a7005 57b97673e727cd1316d3e6fa7fc991d4227366ec552cbe90d367ef2e2e79fe66d26311024100de03 0e9f8884171ae90123878c659b789ec732da8d762b26277abdd5a68784f8da76abe677a6f00c77f6 8dcd0fd6f56688f8d45f731509ae67cfc081a6eb78a5024100c422f91d06f66d0af8072a2b70c5a6 fe110fd8c67344e57bdf2178d613ec442f66eba2ab85e3bd1cf4c9ba8dfff6ce69faca86c4e9452f 4343b784a4a2c8e01b0240164972475b99ff03c98e3eb5d5c741733b653ddaa8c6cb101a787ce41c c28ffbb75aa069136be3bf2cafc88e645face4ed2d258cab6dda39f2dbed3456c05ead0241009182 d4c8393b2768e4dc03e818913ab3f11a8d9ba536eefdf86b4fc79b1e44f3d9ea6553d55041243363 5a193155fc8b59b95944cb3f3db22c9201415757aa13024011a88ae4a84a369f52157b8b57041a96 fcf21e4d058673597199dfbb09e50b16fac272a0d75edf11fcbdd5e1cd4ede4fcd83e97fec730f51 673fbfeab089e29d
30 是因為它是一個 SEQUENCE 標籤。82025c 代表長度。第一個字節表示長度為“長格式”(82 和 80),接下來的兩個字節表示長度(82 和 7F)。所以 SEQUENCE 的實際長度是 025c。所以在那之後就是價值。
然後你進入版本。02 是 int 類型,01 是標籤長度,00 是值。IE。它是雙質鍵,而不是多質鍵。
試圖理解 ASN.1 要復雜得多,而且為了理解 RSA 私鑰的格式,很多都是不必要的。對於 X.509,它變得更加必要,但 RSA 密鑰在格式方面並不像 X.509 證書那樣複雜。
希望有幫助!