密鑰存儲格式


密鑰存儲格式標准

密鑰的存儲需要標准來規范,比如存儲字段的格式,包含哪些內容。比如對於ECC私鑰來說就需要存儲曲線的參數,不然別人拿到私鑰怎么知道你是基於哪條橢圓曲線計算呢,除非你們事先約定好用固定的一條橢圓曲線。
The Public-Key Cryptography Standards(PKCS)是由美國RSA數據安全公司及其合作伙伴制定的一組公鑰密碼學標准。里面跟密鑰存儲格式有關的主要是下面兩個標准。

  • PKCS#1:RSA加密標准。PKCS#1定義了RSA公鑰函數的基本格式標准,特別是數字簽名。它定義了數字簽名如何計算,包括待簽名數據和簽名本身的格式;它也定義了PSA公/私鑰的語法。
  • PKCS#8:私鑰信息語法標准。PKCS#8定義了私鑰信息語法和加密私鑰語法,其中私鑰加密使用了PKCS#5標准。

PKCS#8

PKCS#8標准定義了私鑰信息語法,支持RSA,ECC等不同的私鑰類型。這個標准的正文很短,因為只是總的定義了一個大的框架,並不包含每一種類型的私鑰具體是怎么存儲的。每一種類型的私鑰的存儲格式還需要配合專門的標准。

PrivateKeyInfo ::= SEQUENCE {
                        version Version,
                        privateKeyAlgorithm AlgorithmIdentifier {{PrivateKeyAlgorithms}},
                        privateKey PrivateKey,
                        attributes [0] IMPLICIT Attributes OPTIONAL 
                    }
  • version:協議版本號。
  • privateKeyAlgorithm:算法標識。
  • privateKey:私鑰數據。
  • attributes:附加屬性(可選項)。

RSA密鑰存儲格式

PKCS#1標准定義了RSA密鑰的格式。RSA密鑰可以用PKCS#1格式直接存儲,也可以先通過PKCS#1格式轉換,然后再用PKCS#8格式存儲。

RSAPublicKey ::= SEQUENCE {
    modulus           INTEGER,  -- n
    publicExponent    INTEGER   -- e
}

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
}

ECC私鑰存儲格式

SEC-1標准定義了ECC私鑰的格式。

ECPrivateKey ::= SEQUENCE {
    version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),
    privateKey OCTET STRING,
    parameters [0] Parameters OPTIONAL,
    publicKey [1] BIT STRING OPTIONAL
}

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM