Crittografia di un messaggio in formato fisso con comandi e trasmissione su Internet

3

Collegato a: Crittografia di un messaggio di formato fisso?

Devo comunicare dal Sito A, un insieme di informazioni che verranno presentate agli utenti del Sito A, che quando scelgono di inviare, devono recarsi sul mio Sito B. Al Sito B, devo convalidare che la richiesta in effetti proveniva dal sito A.

Il sito A ha una chiave segreta che può essere utilizzata per la crittografia.

Le informazioni che devono essere passate:

// The SiteName must somehow be identified to Site B otherwise 
// I dont know which secret key to use for decryption
$SiteName = "SiteA"; 
$Command = "commandA";
$UserId = "42";
$UserName = "John";
$UserTimeZone ="America/New_York";
$UserCountryCode ="US"
$BookId ="966";
$message = encryptionfunction($SiteName.'-'.time());

In questo momento, sto inviando tutto quanto sopra, visibile all'utente.

Dovrei crittografare $ Command e altri campi e inviare solo

$SiteName = "SiteA"; 
$message = encryptionfunction($SiteName.'-'.$Command.'-'.$UserId.'-'.$UserName
           .'-'.$UserTimeZone.'-'.$UserCountryCode.'-'.$BookId.'-'.time());

1.Edit

frm: link

fornirò le chiavi API ai siti dei miei partner e useranno il codice che gli ho dato per generare "token".

questi token saranno automaticamente presenti sui moduli su cui gli utenti dei siti partner faranno clic e raggiungeranno il mio sito. quando raggiungono il mio sito, dovrò verificare che provengano effettivamente da un sito partner.

come convalidarlo? l'apikey sarà segreto, ma ciò che viene presentato nel modulo NON lo sarà, quindi non deve essere possibile per gli utenti intelligenti effettuare il reverse engineering del mio algoritmo.

    
posta siliconpi 02.05.2011 - 08:17
fonte

3 risposte

2

Dando un'occhiata alla domanda a cui ti sei collegato, la risposta di Thomas dice tutto. Vuoi firmare i tuoi messaggi e probabilmente vuoi usare un HMAC per farlo. Per impedire la riproduzione, è necessario includere un meccanismo che identifichi univocamente ciascun messaggio e ne impedisca l'elaborazione più di una volta. Una possibile risposta a questo, se gli orologi sono sincronizzati, è quello di ricordare i token che hai elaborato negli ultimi dieci secondi e di elaborare solo token di cinque o più vecchi o meno. Quel tipo di sovrapposizione dovrebbe impedire una condizione di gara.

Se le tue informazioni sono intese come confidenziali in trasmissione, firmane prima di crittografarle.

    
risposta data 02.05.2011 - 16:53
fonte
3

Come già detto da @Georgios , se tutto ciò che vuoi è convalidare l'integrità della tua trasmissione e il fatto che sia generato sul sito A , quindi dovresti esaminare la firma .

Se utilizzare o meno la crittografia è un altro caso. E sta a te decidere.

Stai bene con il tuo utente vedere i dati inviati in testo normale? Suppongo di sì, come presumo che sia per lo più l'input generato dall'utente che viene trasmesso in entrambi i modi (correggimi se sbaglio).

Potresti voler crittografare questi dati per aggirare le intercettazioni sulla strada verso il sito B, ma è la tua chiamata a decidere se vale la pena aggiungere l'overhead.

    
risposta data 02.05.2011 - 12:49
fonte
2

Stai commettendo l'errore di confondere l'autenticazione con la crittografia. Hai bisogno di protezione dell'integrità, non segretezza. L'autenticazione fornisce protezione dell'integrità. La crittografia garantisce la protezione della segretezza. Vuoi l'autenticazione. Esistono due categorie di schemi per l'autenticazione: l'autenticazione a chiave simmetrica (un codice di autenticazione del messaggio, ad esempio, AES-CMAC o SHA256-HMAC) o l'autenticazione a chiave asimmetrica (una firma digitale, ad esempio, firme RSA o DSA). Dato che hai più siti partner, ti suggerisco di utilizzare una firma digitale a chiave pubblica, come una firma RSA, e non l'autenticazione a chiave simmetrica.

Per semplificare: utilizza una firma digitale RSA. Il sito A firma le informazioni utilizzando una chiave RSA privata nota solo al sito A. Il sito B verifica le informazioni utilizzando la chiave pubblica del sito A (che viene distribuita a tutti).

Devi firmare ogni campo.

    
risposta data 03.05.2011 - 06:49
fonte

Leggi altre domande sui tag