Ok, mi ero perso la parte solo cold.
Allora è logico che le chiavi non devi averle sul server. Poi il cold può anche stare online, se non hai le chiavi li sopra ti crei la TX dove ti pare a te (magari la firmi su pc diversi, ogni pc una firma, e offline, se proprio puoi esser tranquillo) e poi la inoltri da la.
Per l'exchange invece, si potrebbe comunque usare il multisig usando più server in comunicazione tra di loro sotto ssl. In questo modo un hacker non dovebbe bucarti 1 solo server ma più di uno. La sicurezza aumenterebbe già cosi notevolmente.
PS. siamo un tantino OT però mi sa ^^'
Gli exchange che ho visto io (lato codice) dialogano tutti in ssl, ed è davvero il minimo. Per quanto riguarda il cold-wallet (online/offline) ecc ecc sfatiamo questo mito una volta per tutte.
Il ColdWallet è un address generato in precedenza, di cui si conservano le chiavi in un posto sicuro. Non c'è nessun client nè wallet.
Gli address ricevono sempre e comunque perchè è la blockchain a garantirlo.
FaSan
Non parlo di https, che è il minimo, parlo di comunicazione tra server in ssl.
Un exchange in genere funziona che tu depositi ad un address, fai le tue operazioni (conversioni fiat ecc) e poi prelevi. Quando prelevi, parte la richiesta al demone (che in genere c'è sotto) che ti manda i btc.
Quello che intendo è che volendo (è una bozza al volo, c'è da lavorarci su... ma già cosi comunque la rende piu sicura), usando invece che 1 server anche solo 3 (o più) server si può fare, in modo anche abbastanza semplice, che la firma devono metterla i due server distinti (possono anche esser macchine virtuali, sia chiaro). Crei un indirizzo con firma a 2 di 3.
Per creare l'indirizzo di deposito usi la firma del server 1, che viene generata per ogni utente, e quella del server 2 e 3, fisse. In questo modo ogni utente ha una firma diversa (e ripeto, qui la gestione è identica ad ora).
Quando uno deve prelevare, invece che come ora dove in genere viene scritta sul DB il prelievo e poi il demone la esegue dopo un po... viene solo scritta e sono solo i server 2 e 3 che prendono e prelevano. Quindi il server 2 legge la TX da fare da DB, crea la raw, la firma con la sua chiave, la comunica in ssl (vedi su ssh per dire) a server 3, che magari controlla che sia davvero presente su DB (ulteriore sicurezza), la firma ed a questo punto è valida e parte.
In questo modo se uno ti bucasse il server web avrebbe a disposizione si tutte le chiavi private e pubbliche di ogni utente, ma non potrebbe fare nessuna TX (gli manca almeno una delle altre 2 firme). Dovrebbe quindi bucare pure il server 2 o il server 3.
Vero che in tutto questo il DB rappresenterebbe un punto debole (se lo buca e la mette li, è fatta), come lo rappresenta ora nel 90% dei casi. Però risolveresti il problema del wallet che viene rubato e speso con 2 click.
Ripeto, sono idee campate al volo ora, mentre le scrivo, avranno mille difetti e sono da sviluppare.. ma con il multisig ci sono tantissimi modi in cui puoi aumentare la sicurezza.