Ce qui est intéressant, c'est que le système de bitcoin apporte déjà une solution de cryptographie asymétriques qu’on peut utiliser pour la partie connexion sans pour autant passer par une api tiers ou d’installer des applications sur le serveur, ce qui serait impossible avec un hébergement mutualisé.
Le bitcoin nous permet de générer une adresse qui est notre identifiant public et une clé privée. Puis il nous permet de faire des signatures avec cette clé et vérifiable avec notre identifiant public. Au final, il nous reste plus qu'à transmettre au serveur l’identifiant public et toute information qui sera transmise sera signée par la clé. Toutes les fonctions existent déjà et sont distribuer en open source.
Cas d’utilisation.Côté Clients, nous avons une application développée en JavaScript (js). Il nous suffit d’utiliser
bitcoinjs. Le client entre une phrase secrète. À partir de cette phrase, un identifiant public est générait et envoyer au serveur.
<script type="text/javascript">
// Creat hash of pass phrase.
var hash = Crypto.SHA256('a', { asBytes: true });
// Init bitcoin
var sec = new Bitcoin.ECKey(hash);
// Add address bitcoin.
var adr = ''+sec.getBitcoinAddress();
// Add key bitcoin.
var key = ''+sec.getExportedPrivateKey();
</script>
Si le client veut envoyer une information au serveur, on utilise la phrase pour générait la clé et signer l’information.
Côté serveur, il nous reste plus qu'a vérifier la signature du client avec son identifiant publique qui est son adresse bitcoin. Si vous utiliser
nodejs, il vous suffit d’installer
bitcoinjs, si vous utiliser php, il y a ces lib qui sont disponible :
bitcoin-php ou
bitcoin-signature-routinesCas de sécurité. - Pendant tout le temps de l’exécution de l’application, la phrase secrète reste sur l’ordinateur du client dans une variable js, et n’est jamais transmise au serveur. Mais elle est sauvegardée en claire dans la variable. Pour palier a ça, on peut utiliser un cryptage symétrique : CRP-Crypt Symmetric Cryptography
- Au moment ou le client rentre ça phrase secrète, on lui demande d’inventer un code pin pour cette session. Le code pin est utiliser pour crypter la phrase, et on ne sauvegarde pas le code pin. La phrase et crypter dans la variable js sur la machine du client.
- Maintenant si le client doit faire une signature ou juste voire ça clé privée, il devra composer son code pin pour déchiffrer la phrase contenue dans la variable js sur ça machine.
- C’est un cas assez pratique si vous êtes au bureau ou chez vous et que vous aller aux toilettes, votre collègue, votre femme ou homme ne pourront pas accéder à votre clé sans avoir le code pin.
- À chaque nouvelle connexion, vous pouvez inventer un nouveau code pin.
Il y a plusieurs avantages à utiliser le system cryptographique du bitcoin directement.- Plus de bases de données avec des informations sensibles comme le pass, ce qui enlève pas mal de problème de sécurité.
- Le client reste maître de sa phrase qui ne quitte jamais ça machine.
- Je suis sure de l’information de mon client qui est signé avec ça clé.
- Il n'y a plus besoin de stoker les informations de connexion, car ils seront régénérait de nouveau, des que le client rentrera ça phrase secrète.
- On peut utiliser l’identifiant pour transmettre des bitcoin au client ou l’inverse.
J’utilise ce système dans le framework
chagry ou dans le portefeuille
mircoin.