Как получить расшифрованные данные от другого пользователя, используя GunDB

Я попробовал .secret() а также .trust() Из gun.user, однако, есть неожиданные результаты. Как я могу получить данные от других пользователей для контроля доступа в приложении? а также мне нужно знать, как расшифровать данные без сообщения об ошибке "Не удалось расшифровать".

  • узел 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. Сделать данные User03 secret используя пару 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. Расшифруйте секрет user03, используя пару user01 справа.

он получает сообщение об ошибке "Не удалось расшифровать".

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

6. Проверьте внутри возвращаемый объект ШАГ 5.

Я ожидаю, что вывод "включается" как расшифрованные данные.

1 ответ

@huhsame, извините за задержку с ответом на это. (Для срочных вопросов, пожалуйста, отметьте меня в Твиттере или в Gitter)

Основная проблема заключается в том, что User.trust а также User.secret В настоящее время (август 2019 г.) используются нестабильные методы альфа-API.

Однако у нас есть стабильный готовый к использованию API нижнего уровня, который вы можете использовать вместо этого, называемый SEA.

Вот полный пример того, как делать то, что вы хотите:

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.

Ты видишь это alice а также bob те же ключевые пары (pub & priv ECDSA & ECDH) за gun.user(ecdsaPubKey) поиски вы, вероятно, уже сделали.

await SEA.secret(ecdhPubKey, alice) получает общий секретный ключ между открытым ключом целевого пользователя (его ключом ECDH, а не ECDSA) и "вами" (Алиса). Как это делается, отлично описано с помощью смешения цветов.

затем .encrypt( а также .decrypt( делать то, что вы ожидаете, если у вас есть тот же "код доступа" (2-й параметр), который получается путем получения общего secret двух пользователей, который выдает одинаковый вывод даже в обратном направлении (Боб, целевой пользователь, передает свою пару ключей как "вы", а ECDH pubkey Алисы как 1-й параметр в secret).

Надеюсь, это выиграет вам время, делая это самостоятельно, пока User.trust а также User.secret (в отличие от SEA.secret который работает уже) методы удобства более высокого уровня готовы.

Другие вопросы по тегам