Bon, pour ceux comme moi qui connaissent assez de cryptographie pour savoir ce qu’est une signature, mais pas assez pour savoir ce qu’est une signature aveugle (Blind signature), voilà comment ça marche (si j’ai bien compris) :
On ajoute deux opérateurs, Blind et Unblind au schema habituel de Sign/Verify, avec la garantie suivante :
La connaissance de Blind(Nonce, Message) ne donne aucune information sur Message. En particulier, si je fournis Blind(Nonce1, Message1) et Blind(Nonce2, Message2), il est impossible de déterminer lequel des deux est la version blinded de Message1.
De même, la connaissance de Message1 ne me permet pas d’identifier quelle est la version blinded de celui ci si je fournis Blind(Nonce1, Message1) et Blind(Nonce2, Message2)
Le schema basique est donc :
Je génère une chaîne aléatoire "Serial". Je demande à la banque de signer ça de manière aveugle, pour 100,ドル ce qui me donne un (Serial, Sign(Serial, BankPrivateKey)) qui vaut 100,ドル sans que la banque n’aie jamais vu ni Serial, Sign(Serial, BankPrivateKey) (la banque a vu Blind(Nonce, Serial) et Sign(Blind(Nonce, Serial), BankPrivateKey), qui sont différends).
Un marchand peut vérifier que la signature est valide, et la banque fournit deux services :
Est-ce que ce serial a été déposé (oui / non) ?
Déposer un serial qui n’a pas encore été déposé
(les plus perspicaces d’entre vous auront remarqué : le 100€ n’apparait nulle part dans le protocole, ça veut dire qu’on ne peut avoir que des jetons d’une valeur fixe ? La réponse est oui, mais la banque a plusieurs paires publiques/privées : PrivKey_1€/PubKey_1,ドル PrivKey_10€/PubKey_10,ドル PrivKey_50€/PubKey_50,ドル ce qui permet d’avoir des montants arbitraires en signant avec plusieurs clés différentes)
Ceci est le résultat de 1-2h de recherche perso, si quelqu’un en connaît plus que moi, les corrections sont les bienvenues.
# Explications
Posté par Moonz . En réponse à la dépêche Le système de paiement GNU Taler prend vie. Évalué à 8.
Bon, pour ceux comme moi qui connaissent assez de cryptographie pour savoir ce qu’est une signature, mais pas assez pour savoir ce qu’est une signature aveugle (Blind signature), voilà comment ça marche (si j’ai bien compris) :
On ajoute deux opérateurs, Blind et Unblind au schema habituel de Sign/Verify, avec la garantie suivante :
Unblind(Nonce, Sign(Blind(Nonce, Message), SignerPrivateKey)) == Sign(Message, SignerPrivateKey)Le schema basique est donc :
Je génère une chaîne aléatoire "Serial". Je demande à la banque de signer ça de manière aveugle, pour 100,ドル ce qui me donne un (Serial, Sign(Serial, BankPrivateKey)) qui vaut 100,ドル sans que la banque n’aie jamais vu ni
Serial,Sign(Serial, BankPrivateKey)(la banque a vuBlind(Nonce, Serial)etSign(Blind(Nonce, Serial), BankPrivateKey), qui sont différends).Un marchand peut vérifier que la signature est valide, et la banque fournit deux services :
(les plus perspicaces d’entre vous auront remarqué : le 100€ n’apparait nulle part dans le protocole, ça veut dire qu’on ne peut avoir que des jetons d’une valeur fixe ? La réponse est oui, mais la banque a plusieurs paires publiques/privées : PrivKey_1€/PubKey_1,ドル PrivKey_10€/PubKey_10,ドル PrivKey_50€/PubKey_50,ドル ce qui permet d’avoir des montants arbitraires en signant avec plusieurs clés différentes)
Ceci est le résultat de 1-2h de recherche perso, si quelqu’un en connaît plus que moi, les corrections sont les bienvenues.