ASN1jsおよびPKIjs-作成後1年

ほぼ1年前、私は新しいPKIjsおよびASN1jsライブラリについてしました。 これらのライブラリの開発について話をする時が来ました。 ASN1jsの場合、この間に主に「化粧品」の変更が行われました。 重要な変更のうち、ASN.1オブジェクトをJSON形式に変換する機能にのみ気付くことができます。 しかし、PKIjsでは、より重要な変更が発生しました。



したがって、PKIjsの現在の主な機能:





まず、署名の実装。 使用するすべてのアルゴリズムを既にリストしましたが、PKIjsを使用すると、これらすべてのアルゴリズムを使用するさまざまなタイプの暗号化オブジェクトを作成できることに注意してください。



これらすべてのタイプの暗号オブジェクトには、以前にエンコードされたオブジェクトの内部構造を取得したり、オブジェクトの新しい構造を作成したり、内部データに署名したり、既存の署名を検証したりできる便利な「ヘルパー」があります。 また、タイプごとに、可能なすべての署名アルゴリズムを使用した個別の使用例があります。



次に、暗号化の実装について説明します。 Web Cryptography APIの作成者は、暗号化アルゴリズムに関する最新情報に基づいて標準を作成しました。 これを考えると、Web Cryptography APIは暗号化の世界から時代遅れのすべてを遮断しようとしたと言えます。 PKIjsはWeb暗号化APIのみに基づいているため、PKIjsは暗号化データ(CMS Enveloped Data)を生成するための最新のアルゴリズムを実装し、誰もが知っている古いアルゴリズムを遮断する必要がありました。



PKIjsは、暗号化されたCMSメッセージのすべてのタイプの受信者と連携する機能を実装します。



暗号化されたCMSメッセージのすべてのタイプの受信者に共通:PKIjsでは、メインデータ暗号化アルゴリズムとして、AES-CBCとAES-GCMの2つのアルゴリズムを使用できます。 AES-CTRを使用することも技術的には可能ですが、このアルゴリズムには、CMSメッセージで使用できる一般的に受け入れられているOIDとアルゴリズムパラメータはありません。



最初に、暗号化されたメッセージの受信者の主な種類、「KeyTransRecipientInfo」と「KeyAgreeRecipientInfo」について説明します。 「KeyTransRecipientInfo」タイプは現在、RSAアルゴリズム(RSASSA-PKCS1-v1_5およびRSA-PSS)で署名されたX.509証明書がある受信者に対してのみ可能です。 KeyTransRecipientInfoタイプの受信者に暗号化を実装する場合、RSA-OAEP非対称暗号化アルゴリズム(RSASSA-OAEP)が使用されます。 RSA-OAEPの場合、MGF1のみが厳密に適用されますが、SHA-1からSHA-512までのハッシュアルゴリズムを指定することは可能です。 証明書にECC署名(楕円曲線暗号化)が含まれる受信者の場合、受信者タイプ「KeyAgreeRecipientInfo」のみが利用可能です。 このタイプでは、より複雑なKEK(キー暗号化キー)生成スキームが使用されます。ECDHアルゴリズムを使用して一時キーが生成され、その後、ハッシュアルゴリズムの使用に基づく特別な「キー派生関数」(KDF)が実行されます。 ここで、ユーザーは、使用される楕円曲線のタイプ(secp256r1、secp384r1またはsecp521r1)と、KDFで使用されるハッシュアルゴリズムのタイプの両方を指定できます。



KEKRecipientInfoタイプでは、すべてが非常に簡単です。ユーザーは、選択されたセッションキー暗号化アルゴリズムと、このアルゴリズム用に保存されたキーを持つバッファーを関数に渡します。 将来のPKIjsでは、以前に送信されたデータのみを使用します。 受信者タイプ「PasswordRecipientInfo」はもう少し複雑です。「キー暗号化キー」はPBKDF2アルゴリズムの結果として生成され、セッションキーはすでにこのデータで暗号化されています。 HKDFアルゴリズムを使用することも技術的には可能ですが、AES-CTRと同じ問題があります。CMSエンベロープデータで使用するために一般に受け入れられているOIDはありません。



また、現在、PKIjsは、たとえばOpenSSLの最新リリースやMicrosoft CryptoAPI(およびCNG)でサポートされていない種類の暗号化メッセージを生成できます。 たとえば、OpenSSLでは(標準コンソールアプリケーションを介して)PBKDF2 + AES-KWを使用するデータを解読する方法はなく、Microsoft CryptoAPIはdhSinglePass-stdDH-sha1kdf-schemeおよびdhSinglePass-stdDH-sha512kdf-schemeスキームをサポートしません、受信者タイプ「KEKRecipientInfo」および「PasswordRecipientInfo」。



暗号化機能のより詳細な説明は暗号化例のカタログにあるREADMEファイルで証明書パスワードで与えられます



結論として、このライブラリはPeculiar Venturesの助けを借りて開発を続けています。 ライブラリの機能は拡張されるだけで、今後もご期待ください。 建設的なコメントと、PKIjsを使用して完了したプロジェクトの説明に感謝します。 ライブラリの操作に関するアドバイスについては、その著者である私に直接お問い合わせください。



All Articles