Реализация протокола соглашения о ключе группы GKE + P на nodejs - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь реализовать протокол GKE + P, представленный на бумаге. Гибкий обмен групповыми ключами с вычислением ключей подгруппы по требованию . Авторы: Мишель Абдалла, Селин Шевалье, Марк Манулис и Дэвид Пойнтчевал (представлен в * 1003). * AfricaCrypt в 2010 г.) на nodejs.

Что говорит протокол:

Предположим, у нас есть участники в $ n $ цикле $ U = (U_1, U_2, ... U_n) $

  1. Каждый участник $ U_i $ выбирает $ x_i $ и вычисляет $ y_i = g ^ x_i $ и передает $ (U_i, x_i) $ .
  2. При получении рассчитываются:
    1. $ \ text {sid} _i = (U_1 | y_1, \ ldots, U_n | y_n) $
    2. $ k '_ {i-1} = y_ {i-1} ^ {x_i} $ и $ k «_ {я + 1} = у- {я + 1} ^ {x_i} $
    3. $ z '_ {i, i-1} = H (k' _ {i-1}, \ text {sid} _i) $ и $ z '_ {i + 1, i} = H (k' _ {i + 1}, \ text {sid} _i) $
    4. $ z_i = XOR (z '_ {i-1}, z' _ {i + 1}) $
    5. $ \ sigma_i = Sign (\ text {SIGN_KEY} _i, (U_i, z_i, sid_i)) $
    6. Трансляция: $ U_i, z_i, sid_i $
  3. Вычисление ключа группы :

    if $ XOR (z_1, z_2, ..., z_n) === 0 $ && $ \ text { is_valid} (\ sigma_i) $ затем

    для j в [i, i-n + 1]:

     <span class="math-container">$z'_{j,j+1} = XOR(z'_{j_j-1},z'_{j})$</span>
    

    ENDFOR

    ц

    И окончательный ключ будет: $ k_i = H_g (z '_ {1,2}, \ ldots, z' _ {n, 1}, sid_i) $

Также упоминается стадия P2P:

  1. $ k '_ {i, j} = y_i ^ {x_i} $
  2. $ k '_ {i, j} = H p (k_ {i, j}, U_i | y_i, U_j | y_j). $

Таким образом, когда дело дошло до разработки его по-настоящему на моем клиентском XMPP-коде node.js, были заданы некоторые вопросы:

  1. Могу ли я сделать sid динамически генерируемой строкой для каждого клиента?
  2. Каков наилучший способ хранения каждого $ z '$ для обеспечения хорошего прохождения?
  3. Вместо нормального DH (повышение мощности) рекомендуется использовать функцию crypto_scalarmult_base из библиотеки libsodium?
...