Я хотел бы создавать безопасные заметки с помощью javascript и webcrypto.
Я нашел возможности для создания сильного ключа через ПБКДФ2 и шифровать данные через АЕС.
Вот пример того, как сгенерировать ключ через PBKDF2 в webcrypto, где требуется соль:
функция getKey (keyMaterial, соль) {
    вернуть окно.crypto.subtle.deriveKey(
      {
        "имя": "PBKDF2",
        соль: соль, 
        "итерации": 100000,
        "хэш": "SHA-256"
      },
      ключМатериал,
      { "имя": "AES-GCM", "длина": 256},
      истинный,
      ["зашифровать", "расшифровать"]
    );
  }
https://github.com/mdn/dom-examples/blob/master/web-crypto/derive-key/pbkdf2.js#L37-L50
Этот ключ используется для шифрования данных:
let keyMaterial = await getKeyMaterial();
соль = окно.crypto.getRandomValues (новый Uint8Array (16));
пусть ключ = ожидание getKey(keyMaterial, соль);
iv = window.crypto.getRandomValues (новый Uint8Array (12));
пусть закодировано = getMessageEncoding();
зашифрованный текст = ожидание window.crypto.subtle.encrypt(
  {
    название: "АЕС-ГЦМ",
    IV: IV
  },
  ключ,
  закодированный
);
Мне понадобится эта информация для будущей расшифровки. Я хотел бы экспортировать эти данные из браузера и расшифровать эти данные позже с предоставленным паролем.
Я хочу иметь следующий формат JSON:
данные: {
  примечания:[
        {
         зашифрованоПримечание: '..',
         IV: '..',
        }
        ]
  соль: '..'
}
Теперь я не уверен, как безопасно хранить соль и вектор инициализации? Можно ли хранить данные, как указано выше?