暗号化の領域では、DER でエンコードされた PKIX 形式と PKCS#1 の概念に遭遇することがあります。 。これらは、特に RSA 暗号化のコンテキストで、公開キーを表すために使用される 2 つの異なるエンコーディングです。 Go の関数 x509.MarshalPKIXPublicKey と x509.MarshalPKCS1PublicKey の違いを解明するには、これらの基礎となる概念を理解することが重要です。
識別エンコーディング ルール (DER) ) は、Abstract Syntax Notation One (ASN.1) を使用して作成されたデータ構造を、コンパクトでプラットフォームに依存しないバイナリ形式にエンコードする方法を定義します。 ASN.1 は、さまざまなプロトコルやアプリケーションで使用されるデータ型と構造を記述するための標準化された言語を提供します。
PKCS#1 は、RSA Security によって開発され、IETF によって標準化された一連の標準を指します。 PKCS#1、付録 A では、RSAPublicKey と呼ばれる RSA 公開キーを表すための ASN.1 構造が定義されています。この構造は、DER エンコード ルールを使用して DER エンコードできます。
Go の crypto/x509 パッケージのこの関数は、公開キーを DER エンコードされた PKIX 形式にシリアル化します。 PKIX (公開鍵インフラストラクチャ X.509) は、公開鍵証明書を表すための ASN.1 構造を主に定義する X.509 標準のバリアントです。
RSA のコンテキストでは、DER でエンコードされたPKIX 形式には次のコンポーネントが含まれます。
この関数は、RSA 公開キーを ASN.1 DER エンコードされた PKCS#1 形式に変換します。前述したように、RSAPublicKey は、PKCS#1 で RSA 公開キーを表すために使用される ASN.1 構造です。したがって、x509.MarshalPKCS1PublicKey は RSA 公開キーを DER エンコードされた RSAPublicKey 構造にシリアル化します。
本質的に、MarshalPKIXPublicKey は PKIX 形式に従って RSA 公開キーのバイナリ表現を生成します。 MarshalPKCS1PublicKey は、公開鍵のバイナリ表現を PKCS#1 形式で生成します。 PKIX 形式には、認証局や関連するアルゴリズムに関する情報など、キーそのものだけでなく、より多くのコンテキストが含まれているため、デジタル証明書での使用に適しています。
以上がGo の x509.MarshalPKIXPublicKey と x509.MarshalPKCS1PublicKey の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。