Как сгенерировать общий ключ шифрования, который будет делиться между пользователями для E2EE

В последнее время я много читал о сквозном шифровании, но я все еще не приблизился к пониманию того, как на самом деле реализовать его в javascript (angular 9).

Итак, я хочу иметь зашифрованный чат между двумя пользователями. Из того, что я понял, мне нужно предпринять следующие шаги:

(1) Оба пользователя должны создать пару открытого / закрытого ключей. Закрытый ключ должен храниться в безопасности (можно ли хранить его в localStorage?). Затем открытый ключ передается другому пользователю вместе с идентификатором.

(2) Затем один из пользователей генерирует секретный ключ, используя как идентификатор пользователя, так и открытые ключи, который затем передается другому пользователю.

(3) Другой пользователь затем проверяет его, создавая секретный ключ с переменными, которые у него есть, используя тот же метод шифрования. Если они совпадают, этот ключ можно использовать для шифрования / дешифрования сообщений.

Я застрял в том, как сгенерировать открытый / закрытый ключи в javascript на шаге (1).

Для общего секретного ключа я предполагаю, что могу сгенерировать его, зашифровав объединенную строку переменной.

Ниже приводится начало моей службы CryptoService, где я планирую все это обрабатывать.

import { Injectable } from '@angular/core';
import * as CryptoJS from 'crypto-js';

@Injectable({
  providedIn: 'root',
})
export class CryptoService {
  constructor() {}

  encrypt(value: string): string {
    return CryptoJS.AES.decrypt(value, 'shared_encryption_key').toString(
      CryptoJS.enc.Utf8,
    );
  }

  decrypt(value: string): string {
    return CryptoJS.AES.decrypt(value, 'shared_encryption_key').toString(
      CryptoJS.enc.Utf8,
    );
  }
}

0 ответов

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