Gestione delle chiavi e autenticazione in nota Prendendo App con Crittografia lato client

2

Lavoro da tempo su un mio progetto per animali domestici: un'applicazione per appunti simile a Evernote con la differenza che tutto il contenuto è crittografato lato client. Mi piacerebbe avere un feedback su alcune descrizioni architettoniche che ho fatto finora.

Registrazione utente: client

  1. L'utente fornisce email e una password
  2. Il client genera una Content Encryption Key (CEK) casuale utilizzando un generatore di numeri casuali crittografici. Questa chiave è utilizzata per crittografare tutti i contenuti degli utenti, inclusi contenuti di testo e risorse multimediali come immagini, audio, ecc. Se questa chiave non esistesse come livello intermedio, la modifica della password di un utente comporterebbe una nuova crittografia di tutto il contenuto.
  3. Ricavare una chiave per crittografare il CEK utilizzando:
    • var input = padToMaxLength (email) + password;
    • var salt = SHA512 (input)
    • var contentKeyEncryptionKey = PBKDF2 (input, salt, 10000)
  4. Cripta il CEK utilizzando contentKeyEncryptionKey derivato nel passaggio precedente
    • var encryptedContentKey = AES256 (CEK, contentKeyEncryptionKey) (preceduto da HMAC-256 su encryptedContentKey )
  5. Ricava un token di autenticazione del server con
    • var input = contentKeyEncryptionKey;
    • var salt = SHA512 (padToMaxLength (email) + password)
    • var authToken = PBKDF2 (input, salt, 10000)

Registrazione utente: server

  1. Il server riceve una richiesta contenente:
    • E-mail
    • encryptedContentKey
    • authToken
  2. Genera un unico sale per utente a 256 bit utilizzando un generatore di numeri casuali crittografici

  3. Genera un token di autenticazione lato server usando:

    • var serverSideAuthToken = PBKDF2 (authToken, salt, 100000)
  4. Memorizza email, serverSideAuthToken e encryptedContentKey nel database

Autenticazione

  1. Il client calcola token di autenticazione del server come descritto sopra e lo passa insieme al messaggio di posta elettronica dell'utente al server
  2. Il server calcola PBKDF2 (authToken, saltFromDatabase, 100000). L'utente è autenticato se Email e corrispondenze token derivate.

Nota: mi rendo conto che l'uso di email + password per la salatura è tutt'altro che ideale.

    
posta Oliver Weichhold 10.01.2017 - 22:34
fonte

0 risposte

Leggi altre domande sui tag