Ne pas utiliser dans la production, c'est à un état POC
L'exemple de base est disponible dans le répertoire examples .
<?php
declare (strict_types= 1 );
require ' ../vendor/autoload.php ' ;
use Gheb ShamirSecretSharingScheme SodiumHelper ;
use Gheb ShamirSecretSharingScheme ShamirSecretSharingHelper ;
$ secretKey = SodiumHelper:: generateKey (); // this will be stored in shares.
$ nonce = SodiumHelper:: generateNonce (); // this could be part of your app configuration
$ secret = ' Sensitive information ' ;
var_dump ( " secret : $ secret " );
// symmetric key encryption with padded message to hide it's length. This does not matter, it's for show !
$ encryptedMessage = SodiumHelper:: encrypt ( $ secret , $ secretKey , $ nonce );
// This is the best part !
// It splits the secret key into 3 shares. (but it could be more)
// initialisation of modulo value, addressing insecure integer arithmetic.
// this would be part of your app configuration or stored elsewhere.
$ m = " 997 " ; // chose any prime number (here around 1000)
$ points = ShamirSecretSharingHelper:: getShareablePoints ( $ secretKey , $ m , 3 );
var_dump ( $ points );
// there you can store your points at different locations.
// and later get them back to get your secret back
// reconstructing and decrypting
// to reconstruct the secretKey the 3 points are needed along the
$ decryptedSecretKey = ShamirSecretSharingHelper:: reconstructSecret ( $ points , $ m );
$ decryptedSecret = SodiumHelper:: decrypt ( $ encryptedMessage , $ nonce , $ decryptedSecretKey );
var_dump ( " decrypted secret : $ decryptedSecret " ); https://en.wikipedia.org/wiki/Homorphic_secret_sharing
https://en.wikipedia.org/wiki/Shamir%27S_Secret_sharing
https://wiki.owasp.org/index.php/security_by_design_principles
https://karière
https://www.geeksforgeeks.org/shamirs-secret-sharing-algorithm-criptographie/
https://ericrafaloff.com/shamirs-secret-sharing-scheme/
Le schéma de partage secret de Sharmir offre une sécurité théorique des informations, ce qui signifie que les calculs que nous avons explorés se sont révélés incassables, même contre un attaquant avec un pouvoir informatique illimité. Cependant, le régime contient toujours quelques problèmes connus.
Par exemple, le programme de Shamir ne produit pas de parts vérifiables, ce qui signifie que les individus sont libres de soumettre de fausses actions et d'empêcher le bon secret d'être reconstruit. Un titulaire de partage contradictoire avec suffisamment d'informations peut même produire une part différente telle que SS est reconstruite à une valeur de leur choix. Ce problème est résolu par des schémas de partage secrets vérifiables tels que le schéma de Feldman.
Un autre problème est que parce que la durée d'une part donnée est égale à la longueur d'un secret associé, la durée d'un secret est facilement divulguée. Ce problème est trivial à réparer en remplissant simplement le secret d'une longueur fixe qui doit être fait avec du sodium comme démontré dans les exemples.
Enfin, il est important de noter que nos préoccupations concernant la sécurité peuvent s'étendre au-delà du simple schéma lui-même. Pour les applications de cryptographie du monde réel, il y a souvent la menace des attaques de canaux latérales, dans lesquelles un attaquant tente d'extraire des informations utiles du calendrier, de la mise en cache, de la faute, etc. S'il s'agit d'une préoccupation, des considérations minutieuses devraient être faites pendant le développement, comme l'utilisation de fonctions et de recherches de temps constantes, empêchant la mémoire de paginer au disque et un tas d'autres choses qui dépassent le champ d'application de cette bibliothèque.