Как получить расшифрованные данные от другого пользователя, используя 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
который работает уже) методы удобства более высокого уровня готовы.