client / server attendibile dopo l'autenticazione su HTTPS per poi passare a testo normale?

4

responsabilità

Se questa domanda è ridicola, è perché lo scambio sicuro di chiavi pubbliche sembra impossibile prima di informarlo. Quindi sto chiedendo cose che potrebbero essere impossibili.

Domanda

È possibile rilasciare una connessione sicura per testo normale mantenendo una connessione affidabile. Significa che il server sa che le richieste del giocatore sono ancora sue e il giocatore sa che le informazioni sulla partita sono ancora i giocatori.

Sfondo

Sto scrivendo alcuni piccoli giochi multiplayer JavaScript che avranno utenti autenticati (account utente persistente su tutti i giochi). Dal momento che il server è limitato da risorse sul lato del computer, vorrei passare a una connessione non criptata per i dati di gioco. Mi chiedo se sia possibile senza aprirmi ad attacchi di spoofing client o server molto semplici (client JavaScript).

Preoccupazione principale

Il trading degli utenti nei giochi sembra particolarmente rischioso, ma è in fase di sviluppo. Soprattutto se monetizzo un gioco legato al trading in futuro. Potrebbe esserci un incentivo sufficiente a falsificare un cliente inviando scambi validi ma dannosi per sé o informazioni di spoofing sul gioco che rendono possibili truffe di disinformazione.

Informazioni aggiuntive

Dal momento che non posso ancora fidarmi del client (come è scritto in JavaScript) lo stato di gioco è sempre lato server e i client possono solo inviare richieste valutate per la validità.

Alcuni piccoli giochi sono già stati scritti e l'autenticazione è attualmente gestita sul sito che gira su https ed è completamente separata dai server di gioco. Sono in procinto di riunirli anche se no.

Soluzione distribuita divertente?

Anche se non ho le risorse, il tempo o le conoscenze prerequisito per implementarlo, se il trading è stato eseguito attraverso una serie di DAPPS (sulla catena di blocco etere) A mio avviso tutte le mie preoccupazioni sarebbero state corrette a scapito di bisogno di spendere soldi veri per le transazioni.

    
posta Sarzorus 27.09.2018 - 20:40
fonte

3 risposte

5

Is it possible to drop a secure connection for plain text while maintaining a trusted connection.

No.

Since the server is resource limited on the computing side I would like to drop down to an unencrypted connection for game data.

Sembra che tu debba fare un po 'di profilazione e ottimizzazione, ma posso quasi garantire che TLS non sarà il collo di bottiglia.

I am wondering if that is possible without opening myself up to very easy client or server spoofing attacks (JavaScript client).

No (tecnicamente potrebbe essere possibile, ma in realtà non ne vale la pena, e ci sono buone probabilità che lo farebbe comunque male).

Since I already can't trust the client (as it's written in JavaScript) game state is always server side and clients can only send requests which are evaluated for validity.

Hai ragione a non fidarti del client, ma non perché è JavaScript. Anche se cerchi di rendere il reverse engineering più difficile, non puoi renderlo impossibile.

Although I don't have the resources, time or prerequisite knowledge to implement it, if trading was run through a series of DAPPS (On the ether block-chain) To my understanding all my concerns would be rectified at the expense of needing to spend real money on transactions.

I blockchain hanno alcune proprietà utili, ma c'è anche una notevole quantità di hype. I blockchain non risolveranno magicamente tutti i tuoi problemi.

    
risposta data 27.09.2018 - 21:06
fonte
2

È possibile rilasciare una connessione sicura per testo normale mantenendo una connessione affidabile?

Questo è possibile. È possibile fornire all'utente una chiave di crittografia durante la connessione TLS, che può quindi essere utilizzata per eseguire la crittografia e / o l'autenticazione (simmetrica) (MAC). Tuttavia, questo richiederebbe di costruire la tua crittografia personale. E la prima cosa che impari in qualsiasi cripto 101 è non rotolare mai la tua cripto. Inoltre, se aggiungi questo layer in più, potresti usare TLS, perché le probabilità sono piccole, si scrive criptazione stretta e si deve essere più veloce di una libreria crittografica ampiamente utilizzata.

In effetti, useresti la stessa tecnica utilizzata da TLS; dopo lo scambio iniziale di chiavi pubbliche / private, il protocollo TLS genera chiavi per la crittografia simmetrica per velocizzare le comunicazioni.

Ricorda che gli utenti possono sempre spoofare il proprio traffico, pertanto è necessario convalidare tutti gli input dell'utente, indipendentemente dal fatto che stiano utilizzando TLS. Per spoofare il traffico di testo in chiaro di qualcun altro, un utente malintenzionato dovrebbe eseguire un attacco Man-in-the-Middle.

    
risposta data 27.09.2018 - 21:26
fonte
1

Is it possible to drop a secure connection for plain text while maintaining a trusted connection.

No, è impossibile. In chiaro, non è possibile che il server impedisca la modifica dei dati, in qualsiasi direzione.

Since the server is resource limited on the computing side I would like to drop down to an unencrypted connection for game data.

TLS non richiede più risorse. Se questo è davvero un problema, è possibile scaricare la crittografia TLS su un altro server o servizio, come ad esempio Cloudflare. Ma qualsiasi VPS o macchina virtuale può gestire facilmente TLS. Se il tuo server non è in grado di gestire TLS, sicuramente non può gestire nemmeno una piccola parte della tua logica di gioco.

Since I already can't trust the client (as it's written in JavaScript)

Non puoi fidarti del cliente, indipendentemente dalla lingua, dalla tecnologia o dalla struttura che usi. Anche se il tuo cliente era in esecuzione all'interno di un ASIC , non dovresti fidarti dei dati del client.

if trading was run through a series of DAPPS

Non farlo. I DAPPS sono difficili da sviluppare, molto difficili da mantenere e non risolveranno il problema in alcun modo. A meno che tu non voglia perdere i soldi dei giocatori, paga qualcuno con esperienza e credenziali per sviluppare queste funzioni per te. Non cercare di fare tutto da solo o perderai tempo, denaro e reputazione. O pagare qualcuno da fare per te, o non coinvolgere denaro reale.

I Dapp non sono scalabili, poiché la rete Ethereum attualmente non può elaborare neanche 50 transazioni al secondo. Dopo aver distribuito un dapp, a meno che non lo crei appositamente pensando di modificare il suo codice, è impossibile correggere eventuali bug. Esistono alcune tecniche, come i contratti di proxy, ma aumentano notevolmente la complessità e i costi (costi di sviluppo e di elaborazione). E un dapp è un tipo di meccanismo molto specifico, e deve essere usato solo quando altre tecnologie non possono risolvere il problema.

    
risposta data 27.09.2018 - 21:52
fonte

Leggi altre domande sui tag