0

gun.userを試してみました.secret()が、予期しない結果が得られました。アプリケーションのコントロールにアクセス.trust()するために、他のユーザーからデータを取得するにはどうすればよいですか? また、「復号化できませんでした」というエラー メッセージが表示されずにデータを復号化する方法を知る必要があります。

  • ノード 10.16.0
  • 銃 0.2019.515
  • クロム 74.0.3729.169

左右に User03 と User01 があります。このテストの目的は、User01 が User03 の秘密データを取得することです。

1. User03 の下にデータを置き、両方のコンソールでデータを確認します。

S.user.get('test').put('come on'); // on left console as user03

S.user.get('test').once(console.log); // on left console as user03
user03.get('test').once(console.log); // on right console as user01

入れてチェック

2. User03 .trust()User01 を左側に配置します。

S.user.get('test').trust( user01 ); // left

信頼

3. secretUser03 のペアを使用して User03 のデータを作成します。

S.user.get('test').secret( S.user.pair ); //left

秘密

4. 両側の暗号化データを確認します。

S.user.get('test').once(console.log); // on left console as user03
user03.get('test').once(console.log); // on right console as user01

シークレットをチェック

5. 右側の user01 のペアを使用して、user03 のシークレットを復号化します。

「復号化できませんでした」というエラー メッセージが表示されます。

user03.get('test').once((data)=>{
    SEA.decrypt(data, S.user.pair, console.log);
});; // right

6.STEP5のリターンオブジェクト内を確認します。

出力が復号化されたデータとして「来る」ことを期待しています。

4

1 に答える 1

0

@huhsame、これへの回答が遅れて申し訳ありません。(お急ぎの場合はTwitterかGitterでタグ付けしてください)

主な問題は、現在 (2019 年 8 月)User.trustおよびUser.secretが不安定なアルファ API メソッドであることです。

ただし、 SEAと呼ばれる、代わりに使用できる安定した本番対応の低レベル API があります。

これは、あなたが望むことを行う方法の完全な例です:

var alice = await SEA.pair();
var bob = await SEA.pair();
var enc = await SEA.encrypt('shared data', await SEA.secret(bob.epub, alice));
await SEA.decrypt(enc, await SEA.secret(alice.epub, bob));

これは、GUN とユーザー API メソッドがその下で使用するものです。

おそらくすでに行ったルックアップの背後alicebobある同じキーペア (ECDSA & ECDH の pub & priv) であることがわかります。gun.user(ecdsaPubKey)

await SEA.secret(ecdhPubKey, alice)ターゲット ユーザーの公開鍵 (ECDSA ではなく ECDH 公開鍵) と「自分自身」 (Alice) の間で共通の共有秘密を取得します。これがどのように行われるかは、有名な色の混合で説明されています。

次に.encrypt(.decrypt(同じ「パスコード」 (2 番目のパラメーター) を持っている限り、期待どおりのことを行います。これはsecret、2 人のユーザーの共通点を導出することによって取得され、逆方向でも同じ出力が得られます (ボブ、対象ユーザーに、彼の鍵ペアを「あなた」として渡し、アリスの ECDH 公開鍵を第 1 パラメーターとして に渡しますsecret)。

User.trust願わくば、User.secret(既に動作するものとは対照的にSEA.secret) 高レベルの便利なメソッドの準備が整うまで、自分でやって時間を稼いでください。

于 2019-08-26T08:08:00.057 に答える