Verwenden Sie nicht in der Produktion, dies befindet sich in einem POC -Zustand
Grundlegende Beispiele finden Sie im 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/homomorphic_secret_sharing
https://en.wikipedia.org/wiki/shamir%27S_secret_sharing
https://wiki.owasp.org/index.php/security_by_design_principles
https://kariera.future-processing.pl/blog/splitting-your-secrets-shamirs-secret-sharing-scheme/
https://www.geeksforgeeks.org/shamirs-secret-sharing-algorithm-cryptography/
https://ericraafaloff.com/shamirs-secret-sharing-scheme/
Sharmirs geheimes Sharing-Schema bietet eine Informations-theoretische Sicherheit, was bedeutet, dass sich die von uns untersuchte Mathematik selbst gegen einen Angreifer mit unbegrenzter Rechenleistung als unzerbrechlich erwiesen hat. Das Schema enthält jedoch immer noch einige bekannte Probleme.
Zum Beispiel erzeugt Shamirs Schema keine überprüfbaren Anteile, was bedeutet, dass Einzelpersonen frei gefälschte Aktien einreichen und verhindern können, dass das richtige Geheimnis rekonstruiert wird. Ein kontroverser Anteilseigner mit genügend Informationen kann sogar eine andere Aktie erzeugen, so dass SS auf einen Wert ihrer Wahl rekonstruiert wird. Dieses Problem wird durch überprüfbare geheime Sharing -Programme wie Feldmans Schema behandelt.
Ein weiteres Thema ist, dass die Länge einer bestimmten Aktie der Länge eines zugehörigen Geheimnisses entspricht, die Länge eines Geheimnisses leicht durchgesickert ist. Dieses Problem ist trivial zu beheben, indem das Geheimnis einfach auf eine feste Länge gepolstert wird, die mit Natrium erfolgen sollte, wie in den Beispielen gezeigt.
Schließlich ist es wichtig zu beachten, dass unsere Bedenken hinsichtlich der Sicherheit über das Programm selbst hinausgehen können. Für Kryptographieanwendungen in der realen Welt besteht häufig die Gefahr von Nebenkanalangriffen, bei denen ein Angreifer versucht, nützliche Informationen aus Anwendungszeitpunkten, Caching, Fehler und vielem mehr zu extrahieren. Wenn dies ein Problem ist, sollten während der Entwicklung sorgfältige Überlegungen vorgenommen werden, z. B. die Verwendung konstanter Zeitfunktionen und -Suchanlagen, das Verhindern, dass das Gedächtnis von Paging zu Scheibe auftritt, und eine Reihe anderer Dinge, die außerhalb des Rahmens dieser Bibliothek liegen.