web-dev-qa-db-ja.com

複数のキーを使用してドキュメントを暗号化し、それらのキーについて人々に説明責任を負わせる

ここで架空。機密性の高いファイルがあり、公開したくない場合や、他の人も公開したくない場合があります。殺害される可能性を減らすために、暗号化されたバージョンのファイルをbittorrentで公開し、殺された場合に公開するように指示する暗号化キーを信頼できる当事者(「キー所有者」)に渡します。次に、公開されたファイルが本物であることを公に知らせます。 (はい、私たちはマニングの状況について話しているのです。)

1つのキーホルダーが危険にさらされる可能性を回避し、次の3つのことを実行します。

  1. プレーンテキストドキュメントを公開する
  2. 公開した認証ステートメントを使用して、平文が本物であることを一般に知らせます(つまり、もっともらしい否認を削除します)
  3. 匿名のまま

たとえば、これを行う1つの方法があります。

  1. キーホルダーごとに1つずつ、N個の対称キーを作成します
  2. キーホルダーごとに、プレーンテキストのコピーを作成し、「このドキュメントのリリース元:」とそのキーホルダーのIDを先頭に追加します
  3. それぞれの対称鍵で各コピーを暗号化します
  4. それぞれキーを配布します
  5. ファイル全体を公開する

ただし、これにはN * size_of_plaintextスペースが必要です。 この質問は、より効率的な方法があるかどうかを尋ねています

最初に、gpgの複数鍵暗号化について調査しました。 https://stackoverflow.com/questions/597188/encryption-with-multiple-different-keys (@terdonに感謝)を参照してください。 GPGは次のように機能します。

gpg --encrypt --recipient [email protected] --recipient [email protected] doc.txt
  1. GPGは対称鍵を選択します(X
  2. GPGはプレーンテキストをXで暗号化します
  3. GPGはXをパーティキーP_aliceP_bob、...で暗号化し、アリス、ボブなどはそれぞれそれらの1つを復号化できます

これは、回避したい攻撃に対して脆弱です。

  1. ボブはP_bobを使用してXを復号化します
  2. ボブはXを匿名で公開します
  3. パブリックは、公開された平文をXで復号化します
4

プレーンテキストの暗号化ハッシュの適切なセットを事前に公開できます。たとえば、公開することによって[ MD5SHA-1-16SHA-3-512RIPEMD-32 ]のセットプレーンテキストのハッシュ。これらすべてのハッシュに同時に一致するプレーンテキストを見つけるのは非常に困難です。 同じデータがハッシュする必要があるため、このような攻撃は、関連するハッシュアルゴリズムのいずれかに対して1回目または2回目よりも大幅に困難になることに注意してください 原像攻撃関連するすべてのアルゴリズムの正しい値およびを読み取ると意味があります。また、これらのうち、ウィキペディアによると 少なくともSHA-3-512とRIPEMD-320は、現在、ブルートフォースよりも優れた攻撃を行うことは知られていない 出力スペース全体に対して、MD5が衝突している間複雑さの攻撃2 ^ 21、プリイメージ攻撃は依然として2 ^ 123であり、出力スペース全体2 ^ 128に対する総当たり攻撃よりもわずかに複雑ではありません。 (基本的に、衝突攻撃は、両方の入力を選択し、一方のハッシュが他方にも有効であるように同一のハッシュを生成する異なる入力のペアを探す場所です。原像攻撃は、ハッシュと何らかの入力、できれば元の入力とは異なる入力を探しています。これにより、特定のハッシュが生成されます。)これらのハッシュ値自体は、平文データについては何も言いません。

攻撃をさらに複雑にするために、 Merkle-Damgård構造 に基づいていない少なくとも1つの暗号化ハッシュアルゴリズムを従来の圧縮関数(上記のハッシュアルゴリズム、おそらくSHA-3の例外は、そのような獣が存在する場合です。頭のてっぺんからは何も知りませんが、それは可能性を排除するものではありません。どうやら、Keccak/SHA-3は、少なくともいくつかの部分で異なる設計を使用しているため、このようなハッシュアルゴリズムのセットに含めるのに適しているように思われます。

これにより、後のある時点でプレーンテキストファイルのコピーを受け取った人に、何かが起こった場合に公開する予定のものと一致することを確認する方法が提供されます。 。その人が平文が本物であるという非常に高い確実性を持つためには、その人はそれらのハッシュのソースが本物であると信頼するだけでよい(そしてハッシュ値の自分のコピーが改ざんされていない) 、これは明らかにローテクな方法で不正開封防止シールを使用して実行できます)、コンピューターでハッシュを計算するために使用されるソフトウェアは、想定されていることを実行します(これは、複数の個別の実装を使用してある程度独立して検証できます)公開されているテストベクトルに対してこれらの実装をテストします)。

しかし、複数を配布せずに復号化キーを漏らした人の側で本当の説明責任を得ることができるとは思いません、プレーンテキストの異なる暗号化コピー。プレーンテキストブロックと受信者キーごとに個別の暗号化データブロックを必要としない複数キー暗号化スキームでは、プレーンテキストが特定のキーを使用して暗号化される必要があります_K_0_次に、n受信者の場合、受信者キー_K_1_から_K_n_の各セットで暗号化され、暗号化されたマスターキーの完全なセットE(using K_n)(K_0)は暗号テキストに含まれています。 (それを望まないときはいつでも、平文ごとに複数の暗号文が必要です。これにより、攻撃者の攻撃対象領域が増加します。これは、名前がManningまたはSnowdenの場合に懸念されます。)したがって、各受信者は必然的に「マスター」復号化キー_K_0_は、保護しようとしているシナリオを正確に示します。

私が考えることができる唯一の方法は、DES(古い恐竜について言及しているので、この回答に反対する前に読んでください)のようなアルゴリズムを使用することです。これにより、キーマテリアルの未使用のパリティビットが許可されます。 、これらのビットを受信者ごとに一意に設定し、各キー受信者のパリティビットをメモしておきます(これらの「パリティ」ビットは、実際のパリティとしてではなく、残りのキーマテリアルとは無関係に設定するため、これらのビットにはとにかくセキュリティへの影響は、これによるセキュリティの低下はありません。)合理的なセキュリティのために、 EDE 3DES のようなスキームを使用できます。ただし、暗号テキストにアクセスし、アルゴリズムの知識を持ち、暗号化の知識があると、暗号化アルゴリズムのこのプロパティを知っているか、簡単に見つけることができ、復号化キーを公開する前に、未使用/パリティビットを任意の値に設定して、考えられる説明責任の手段を無効にし、場合によっては指を指すことができます。他の誰かに。

これはいずれも、対称(またはさらに言えば非対称)暗号化の使用を前提としていないことに注意してください。どちらでも完全に実行できますが、対称アルゴリズムのみのアプローチは、非対称アルゴリズムのみのアプローチよりもはるかに実用的です。使用するのは簡単(鍵配布の問題を解決するという意味で)そしてより実用的(暗号化テキストサイズなどの観点から)データの対称暗号化とその後の復号化キーの非対称暗号化(これは非対称暗号化が通常行われる方法です)が、絶対にそのようにする必要があるとは何も言いません、そして、復号化キーを暗号化する公開キーを何らかの方法で信頼できる必要があります。

3
a CVn

暗号化されたファイル自体を公開するのではなく、公開鍵のコピーを公開します。次に、信頼できる各キー所有者に、ドキュメントのプレーンテキストコピーと、ドキュメントの正当性を裏付ける暗号化された(公開したばかりの公開キーに対応する秘密キーを含む)ステートメントを提供します(たとえば、ドキュメント)、およびこのステートメントを与えるキーホルダーの名前に言及します。

このようにして、キーホルダーの誰もがプレーンテキストドキュメントをリークする可能性があります。しかし、その正当性を証明するために、彼らはあなたから署名された声明の彼らのバージョンを明らかにしなければなりません、そしてそれは彼らのアイデンティティを明らかにします。

さらに保護するために、 シャミアの秘密共有 アルゴリズムを使用して、各キーホルダーに与えられたプレーンテキストドキュメントをキーホルダー間で分割されたキーで暗号化できます。そうすれば、個々のキーホルダーは、他の1つ以上のキーホルダーと協力せずに、機密ファイルの内容を読み取ったり公開したりすることはできません。このスキームでは、ドキュメントを一般に公開するために任意の数の共同キーホルダーを必要とする可能性がありますが、ドキュメントの正当性を検証するために、キーホルダーの1人だけがIDを明らかにする必要があります。

0
Ajedi32

アリスがそのような主張をする場合、あなたは他の人がその主張を確認する方法を望みます。私はいつも、公開鍵暗号化は認証の方法にあまり影響を与えないという印象を受けてきましたが、デジタル署名のようなものを導入すると、説明責任の問題に対処するドキュメントの信頼性を検証できます。

Gpgを使用しているので、ここで説明されているようなものだと思います: http://www.tutonics.com/2012/11/gpg-encryption-guide-part-3-digital.html

送信者が公開鍵を使用して受信者のデータを暗号化する場合、受信者は、送信者が実際に本人であるかどうかをどのように知る必要がありますか?

公開鍵は誰でも使用できるため、送信者がデータの送信元であることを明確に証明する手段が必要です。 GPGは、データが改ざんされていないことを証明するデータの署名(指紋など)を生成することと組み合わせて、上記を実行する方法を提供します。

0
MxLDevs