web-dev-qa-db-ja.com

暗号化のためのメタフォーマットはありますか?

暗号メッセージ構造を記述するための(適切に指定された)メタフォーマット/スキーマフォーマットはありますか?

「これはスキーム#5を使用しています-詳細はドキュメントを参照してください」だけではない形式(一部のチャネルが対称/非対称エンコーディングまたはシグネチャを必要とする可能性がある場合)を説明する方法を探しています。

コンピューターで読み取り可能にすることで、楽しい工夫をすることができます-スキームが機能するために事前共有する必要がある情報をプログラムで推定する、メッセージのどの部分に整合性があるかを推定する、スキームのプロパティ(エラーを含む)のレポートを生成するなどパディングが不十分なためなど)-しかし、私が物事を表現するための言語を持っていることは、私にとってもすっきりしていると感じます。


実例となる(実際の構文ではありません)例として、次のようなものがあります。

  • random-iv[128] + CTR[AES](shared-secret[256], iv, message)-IV、AES-256-CTRエンコードメッセージが続く(共有シークレットは未指定)

  • message + your-key[2048].public + RSA[DECODE](your-key[2048], random-padding[256] + SHA256(message))-メッセージの後に公開鍵とSHA-256ハッシュのRSA署名が続く

  • HMAC[SHA256]({0x123456...}, message) + message-最初にHMAC(リテラルとして秘密)、メッセージと連結

  • RSA[ENCODE]({0x...my-key-literal}, random-iv[128] + random-key[256]) + CTR[AES](random-key[256], random-iv[128], message)-暗号化キーを指定し、ランダムキーを含むメッセージにAES-256を使用します

ハードコードされた値がない場合(たとえば、HMACシークレットがリテラルではなかった場合)は、一般的なスキームを記述します。

ハードコードされた値を使用すると、特定のチャネルで期待されるデータを記述し、それが一般的なスキームのサブセットであることを確認することもできます。


これは、構造化データのASN.1(バイナリストリームの内部構造、およびPERのようなものと組み合わせるとビット単位のレイアウトでさえも記述できる)と少し似ていますが、おそらく方程式/関数式のように、暗号化プリミティブおよび未知数などを使用します。

それは可能だと思われますが、何も見つかりませんでした。これを暗号化するための既存のメタフォーマットはありますか?

10
cloudfeet

それは正確にはあなたが要求したものではありませんが、少なくともこれらの2つは私の意見では一見の価値があります。

  • security protocol を記述するための一般的で抽象的な表記法があり、Kerberosなどの非常に複雑なものを記述するために使用されています。ニーダム・シュレーダープロトコルもこのように表現できます。繰り返しますが、あなたが探していたものではありませんでしたが、私にそれを思い起こさせました。
  • より基本的なレベルで、暗号の実装を教科書で見られるものに近づけようとする Cryptol 言語をご覧になることをお勧めします。ただし、Cryptolのポイントは、メッセージよりも機能を説明することにあります。

とにかく、何年も潜んで他人を養った後、最初にここに投稿します。これが少し役に立てば幸いです。

2
Téo Lohrer

Cryptographic Message Syntax(CMS) をいくらか説明しているようです。 PKCS#7から緩やかに成長しました。

0
John Downey