web-dev-qa-db-ja.com

PGPキーを使用した信頼できる仮名の確立

これは私にとってちょっとした思考実験になりました。

誰かが、対応するPGP鍵とともに仮名を確立したいとしますが、他の人はどのように名前と鍵の間の対応を確認できますか?

一般に、PGP鍵は実在の人向けであり、そのIDはIRLを検証できますが、ここでは適用されません。

私の最初の当初の考えは、仮名はキーフィンガープリントに基づいた名前である可能性があるということでしたが、文字数によっては、この要件を満たす新しいキーを生成するのは非常に簡単でした。

誰かがこの対応を検証するための戦略(潜在的には技術よりも社会的である可能性が高い)がありますか?

編集:

この要件を持つ仮名の潜在的な目的は、中本聡、または内部告発者と同じ方針に沿っている可能性があります。偽名の所有者からの検証可能なドキュメントまたはソフトウェアを常にリリースしたい。

10
Sam Lanning

仮名キーの課題は、匿名性だけではありません。あなたのアイデンティティが一意ではないという追加の問題がありますand証明するのがより困難です。仮名/ニックネームが確立されていると見なす(つまり、これらの行のハッシュまたは何かに基づいて新しいIDを作成するのではなく、既存のIDを使用している)ニックネームだけではありませんあなたのアイデンティティと評判を主張するのに十分

あなたのニックネームがサムであり、友達のニックネームがサムであり、あなたの両方が「信頼できる」偽名キーを持っている場合、どちらも相手に叫んで「彼は本当のサムではありません! 」

1つの解決策は、オンラインIDに関するすべての情報をいくつかの一意の場所(「私はStackExchangeのSamだ」、「私はsamlanning.comドメインとWebサイトを所有している」など)に再グループ化し、次に取得することです。 これらすべてのIDを検証および確認する。それには2つの方法があります。

  1. OpenPGPに基づいた Keybase (またはmake/Host your own)などのWebサイトに参加します。内部ではありますが、これらの「中央の一意のアイデンティティ」はすべて、アイデンティティ/仮名に対して信頼の輪を作ります。プロファイルは次のようになります これのように (はい、GnuPGの主要な作成者でさえこのWebサイトを使用しています)。

  2. OpenPGP(特にGnuPG)を使用して、仮名鍵に署名(認証)する意思のある人を見つけ、仮名IDを確認する個人的な方法に従って、ポリシーURLと表記を組み込むように要求します。証明書のデータ

私は他の人の鍵を認証するときに個人的にこれを行います:

gpg --ask-cert-level \
     --cert-policy-url http://diti.me/pgp/\#policy \
     --cert-notation [email protected]=http://diti.me/pgp/certs/%f.notes.asc \
     --sign-key

policy URLは、OpenPGPキー認証ポリシーが何であるかを世界に説明するURL(ここでは、インターネットドキュメント)です。偽名キーに署名する人は、このドキュメントでは、偽名キーを実際に認証することとその方法を伝える必要があります。

キー表記は、key=valueという形式の任意のテキストです。 OpenPGP仕様では、実装がこれらをどのように使用するかを実際に指定していませんが、URLをvalueとして使用することが1つの用途です。ただし、必要に応じて、署名者に「サムの偽名を慎重に確認した」などのテキストを入力することもできます。

上記の私のコマンドを使用すると、デフォルトでポリシーURLと表記データの両方が表示されることがわかります on keyservers

sig  sig1  CD42FF00 2014-04-07 __________ __________ []
    Policy URL: http://diti.me/pgp/#policy
    Notation data: [email protected] http://diti.me/pgp/certs/A31D4F81EF4EBD07B456FA04D2BB0D0165D0FD58.notes.asc

記録のために、これはCAcert.orgの自動GPG署名鍵に署名する私であり、ここに 表記データへのWeb Archiveリンク を残します。

署名者によって作成された表記データを読み取ることができる限り、誰もがあなたの仮名IDを信頼するかどうかを決定できます。これらを使用して、やる気のある人は、あなたの仮名がどれほど信頼でき、信頼できるかを注意深く確認してくれる人が実際にそうすることができます。

編集:実際には、私はポイント2で少し話題から外れたかもしれないと思います。あなたの質問は、偽名の認証プロセスについてのみですか、それとも監査についても

7
Diti

もう少し友達と話した後、私たちは候補の解決策を考え出したかもしれません。

回避しようとしているのは、元のキーホルダーになりすましている人物であるため、誰かが新しいキーペアを生成し、元の人物が行ったすべてに再署名して、同じ偽名を所有していると主張してはなりません。

分散タイムスタンプシステムを使用して、仮名と公開鍵の関連付けが特定の時間(つまり、仮名が作成された時間)に存在したことを証明できます。例 https://www.btproof.com/

人々はそれから、関連付けが有効であることの証明としてこれを十分に考慮し、UIDに署名することを選択できます。

1
Sam Lanning

この問題について読み、Bicoinタイムスタンプについて調べた後、私は、PGPキーとビットコインアドレスを所有者として使用して、偽名IDの所有者であることを証明する方法を作成する比較的簡単な方法を思いつきました。このシステムは、これら2つのことのロックを解除するために、原則としてあなたとあなただけが所有している秘密が必要であることを利用しています。

  1. PGP鍵ペアを作成します。
  2. クライアントでビットコインアドレスを作成します。このアドレスに属するウォレットをバックアップしてください。バックアップしないと、認証を受けることができなくなります。
  3. [このページはこちら] [1]に従って、ビットコインのタイムスタンプをキーに実行します。基本的に、これは次のようになります:
    1. キーのフィンガープリントのSHA256ハッシュを取得します。
    2. それを構文的に有効なビットコインアドレスに変換します。
    3. 作成したアドレスからキーの指紋のハッシュから作成したアドレスに、小額の支払い、10米ドルセント相当のBTCで送金します。支払いは秘密鍵でロック解除できないアドレスに送られているため、ビットコインは消えます。ただし、アドレスは構文的に有効であるため、トランザクションは成功し、これはブロックチェーンに公開されます。これは、ビットコインネットワーク上のすべてのシッククライアントによって共有され、ブロックXが時間Tにブロックチェーンに追加されたときに、アドレス1YouR0wn4dRESSがアドレス1SHA256sUm0fY0urkEYf1NG3rPr1nTにNビットコインを送信しました。
  4. 最後に、タイムスタンプトランザクションの詳細を秘密鍵の情報フィールドに入力し(たとえば、新しいキーIDを作成し、ユーザー名フィールドに、「1YouR0wn4dRESSから1SHA256sUm0fY0urkEYf1NG3rPr1nTに送信された0.0005 BTCでタイムスタンプを付けて」などのように入力し、キーをキーサーバー。

誰かにあなたの身元を検証させるには、このプロトコルに従ってください:

  1. 検証者に公開鍵を使用して暗号化されたメッセージを送信してもらい、認証者が選択したアドレスに少額の支払いを要求します。
  2. 秘密鍵でメッセージを復号化します。これは、あなたがキーの秘密部分の所有者であることを証明します。
  3. 1YouR0wn4dRESSから、認証システムが送信したアドレスに支払いを送信します。これは、あなたがアドレス1YouR0wn4dRESSに関連付けられたウォレットの資金を使うために必要な秘密鍵の所有者であることを証明します。
  4. 追加の信用のために、あなたはオーセンティケーターに例えばblockchain.infoであなたのタイムスタンプトランザクションを調べさせることができます

ステップ3を正常に完了することができるのは、公開鍵を使用して送信されたメッセージのロックを解除する秘密鍵を所持している場合のみです。これは、支払い手順を読むために必要です。支払いは、キーのフィンガープリントにタイムスタンプを付けたときにブロックチェーンに到達したアドレス1YouR0wn4dRESSでウォレットのロックを解除する秘密キーを所有している場合にのみ完了できます。これで認証されました。

0
Echelon-1