Posso salvare e archiviare l'invio di un utente in un modo che dimostri che i dati non sono stati alterati e che il timestamp è accurato?

3

Ci sono molte situazioni in cui la validità del timestamp allegato a un determinato post (invio di informazioni) potrebbe essere inestimabile per l'uso legale del proprietario del post. Non sto cercando un servizio per raggiungere questo obiettivo, come richiesto in questo ottima domanda , ma piuttosto un metodo per il raggiungimento di tale servizio.

Per l'autenticazione legale (nella maggior parte dei sistemi giuridici) del contenuto del testo e del suo tempo di invio, il proprietario del contenuto dovrebbe dimostrare:

  • che il timestamp stesso non è stato alterato ed è stato accurato per cominciare.

  • che il contenuto del testo collegato al timestamp non è stato alterato

Mi piacerebbe sapere come ottenere ciò tramite la programmazione (non una soluzione specifica per la lingua, ma piuttosto la metodologia alla base della soluzione).

  1. È possibile convalidare un timestamp per essere accurato al momento della presentazione effettiva del contenuto?

  2. I dati possono essere archiviati in un formato che può essere letto, ma non scritto in modo comprovato?

In altre parole, posso salvare & memorizzare l'invio di un utente in un modo che provi che i dati non sono stati alterati e che il timestamp è accurato?

Non riesco a pensare a nessun metodo di programmazione che possa renderlo possibile, ma non sono il programmatore più esperto là fuori. Basato sulla risposta di MidnightLightning alla domanda che ho citato, questo genere di cose è stato fatto.

Chiarificazione: sto cercando un metodo (hashing, crittografia, ecc.) che consenta a un ragazzo medio come me di ottenere l'effetto desiderato attraverso la programmazione.

Sono interessato a questo argomento allo scopo di Pubblicazione difensiva .

Mi piacerebbe imparare un metodo che consenta a un programmatore di tutti i giorni di prendere il suo computer, scrivere un programma, passare informazioni attraverso di esso e dire:

I created this text at this moment in time, and I can prove it.

Ciò significa che le informazioni devono essere protette dal programmatore che scrive il codice. Forse sarebbe necessaria un'API di terze parti. Sto bene con quello.

    
posta Community 12.06.2014 - 01:06
fonte

4 risposte

0

Certo.

Puoi prendere il contenuto, aggiungere la rappresentazione testuale del timestamp) e quindi generare un hash crittograficamente sicuro sul risultato che memorizzi insieme ai dati. In futuro, puoi prendere il contenuto che hai archiviato, il timestamp che hai archiviato e ripetere il processo. Se l'hash esce allo stesso modo, puoi dire con alta sicurezza che il contenuto non è cambiato.

Naturalmente, questo è sicuro solo come l'algoritmo di hash che scegli. Qualsiasi hash avrà qualche rischio di collisioni, ma un hash sicuro renderà questo rischio incredibilmente piccolo. Idealmente, se un hash produce un numero a 32 bit, ci si aspetterebbe che le probabilità di una collisione siano 1/2 ^ 32. Un hash meno sicuro creerà la possibilità che un utente malintenzionato possa modificare il timestamp e apportare una leggera modifica al contenuto che produce lo stesso hash quando i due sono concatenati insieme. Anche se, in genere, richiederebbe un aggressore piuttosto sofisticato - la generazione di collisioni hash non ovvie anche per gli hash relativamente deboli come MD4 (cioè che non richiedono che il testo sia completamente confuso) è piuttosto impegnativo.

Assumendo un algoritmo di hash perfetto, ogni stringa data viene convertita deterministicamente in un hash ma ogni hash è ugualmente probabile dato l'universo degli input e che non ha informazioni recuperabili sulla stringa di input originale. In un mondo perfetto, se ho un algoritmo di hash a 32 bit, non sapendo nulla della stringa che inserisco, una qualsiasi delle 2 ^ 32 possibili uscite sarebbe ugualmente probabile. Cambiare 1 carattere della stringa di input renderebbe ugualmente probabile una qualsiasi delle 2 ^ 32 possibili uscite. Ciò rende poco pratico, a meno di generare forza bruta e di provare ingressi 2 ^ 32, per trovare un altro input che produce una collisione con un particolare hash. Ovviamente, gli algoritmi di hash reali probabilmente non sono perfetti (proprio come gli algoritmi di crittografia reali probabilmente non sono perfetti) quindi anche i migliori algoritmi probabilmente non sono così difficili da interrompere come previsto dalla loro lunghezza di bit non elaborata. Ma sono probabilmente abbastanza bravi che nessun attaccante sarà in grado di produrre una collisione nel corso della sua vita a cui ti interessi delle informazioni.

    
risposta data 12.06.2014 - 01:41
fonte
1

Tradizionalmente, dovresti usare i servizi di timestamping per questo genere di cose. Un servizio timestamp è un servizio noto che svolge le seguenti attività:

  1. Invia al servizio un po 'di dati (come un hash).
  2. Il servizio combina questi dati con il timestamp attuale.
  3. I dati combinati sono firmati con la chiave privata del servizio.
  4. Il servizio invia i dati e la firma combinati al client.

Ciò consente a chiunque di convalidare che l'hash specificato è stato firmato in un determinato momento, convalidando la firma utilizzando la chiave pubblica del servizio.

In risposta alle tue domande:

Can a timestamp be validated to being accurate to the time that the content was really submitted?

Sì, se tutti si fidano del servizio timestamp (il servizio timestamp può essere neutrale e può firmare timestamp inviato da amici e nemici). Prendi in considerazione ad esempio un servizio di timestamp offerto da un governo nazionale (se ti interessano solo le transazioni all'interno di un determinato paese) o da un'entità come una banca svizzera.

Can data be stored in a form that it can be read, but not written to, in a proven way?

Sì, perché la firma del servizio timestamp può essere verificata in qualsiasi momento utilizzando la chiave pubblica del servizio.

NOTA: entrambi i "Sì" in alto vengono forniti con i normali avvertimenti sui servizi correttamente implementati. Se il servizio timestamp è compromesso in qualsiasi modo, i timestamp firmati potrebbero diventare sospetti.

Ci sono altre soluzioni a questo problema. L'articolo di Wikipedia su Timestamp attendibile offre una buona panoramica.

    
risposta data 12.06.2014 - 02:04
fonte
1

Non c'è modo di fare ciò che vuoi con la teoria dell'informazione digitale pura. Tuttavia, c'è un modo per usare un assistente fidato per aiutarti. La versione classica di questo comporta la pubblicazione di informazioni in una colonna classificata in un particolare giorno in un particolare giornale. È estremamente difficile forgiare un post di questo tipo dopo il fatto, quindi è generalmente considerato affidabile.

Ora la vera sfida è decidere quali informazioni pubblicare. Ovviamente postare tutti i dati con data e ora per gli annunci diventerebbe vecchio dopo un po '. Tuttavia, pubblicare un hash di tutti i dati con data e ora che hai raccolto (incluso l'hashing degli stessi timestamp) e pubblicarli sul quotidiano sarebbe ragionevole. Quindi, se devi dimostrare il timestamp in un tribunale, devi semplicemente rivelare tutti i timestamp in quel blocco. Chiunque verifichi semplicemente ha bisogno di cancellare i dati, quindi cerca nel giornale l'hash.

Questo ovviamente fornisce solo un limite - non è possibile aver generato i dati con data e ora dopo che il giornale ha ricevuto l'hash, ma potrebbe essere stato generato in qualsiasi momento prima della lancetta e ritardato fino a quando non "ne hai avuto bisogno". Per molte situazioni legali, è sufficiente un limite superiore. Per gli altri, sono necessari limiti più attenti. Una soluzione comune, che sembra essere utilizzata da bitcoin, consiste nel concatenare i dati. Archivia i tuoi dati con data e ora e cancellalo. Quindi si crea una catena di hash che combina questo hash di dati con data e ora con l'ultima voce della catena. Questo non ti impedisce di falsificare un tempo, ma lo rende drammaticamente più difficile perché ora devi falsificare ogni voce che segue i dati inseriti.

Esistono centinaia di varianti di questi schemi di verifica che utilizzano strumenti come questo, ma si dividono in due passaggi:

  • Crea un documento "prova" che sia abbastanza piccolo da essere facile da gestire (come un hash)
  • Fornisci questo documento "prova" a una terza parte attendibile che può ragionevolmente garantire di aver ricevuto la prova

Ricorda che i requisiti legali sono di solito a un livello di dubbio. Questo dà flessibilità. Ad esempio, se è necessario dimostrare che il tempo di un messaggio di log è di un minuto, è possibile utilizzare un processo a due passaggi. Ogni giorno, pubblichi l'hash del tuo intero log su un giornale o un'altra entità fidata. Ogni minuto pubblichi l'hash dei log su un sito web pubblico. Se nessuno scarica questi diari minuti, potrebbero provare a screditarli, ma non possono screditare i dati dei giornali, e il semplice fatto che tu pubblichi costantemente dati verificabili può essere sufficiente a placare i dubbi dimostrando che avevi il desiderio di essere tenuto in standard strong.

    
risposta data 12.06.2014 - 04:04
fonte
0

Ho lavorato in un negozio che memorizzava immagini di documenti legali in un database. Per garantire la sicurezza, tutti i documenti dell'utente sono stati memorizzati in questo modo:

  • prendi un codice hash del documento

  • crittografare il documento & memorizzalo

  • codifica hashcode & memorizzalo

  • prendi un codice hash del documento crittografato & memorizzalo

  • prendi un codice hash del codice hash codificato & memorizzalo

Ora, è ancora possibile per qualcuno che ha tutte le chiavi di crittografia per cambiare tutto, ma se qualcuno di questi viene fuori sincrono, potrebbero rilevare la manomissione.

(Full disclosure: fino ad oggi, non sono sicuro che quel processo sia stato brillante o solo un modo convincente per sembrare brillante senza effettivamente realizzare nulla.)

Non sono sicuro che sia una soluzione sufficiente, o addirittura buona, ma essenzialmente la risposta alla tua domanda si riduce a hashcode, crittografia e salvataggio di pezzi diversi in luoghi diversi.

Nel tuo caso, potrebbe essere sufficiente salvare il testo e l'hash del testo in archivi dati separati. In qualsiasi recupero, controlla per accertarti che corrispondano ancora. Tuttavia, qualcuno con accesso root potrebbe ancora sconfiggere questo se sapessero cosa dovevano fare.

    
risposta data 12.06.2014 - 01:44
fonte

Leggi altre domande sui tag