Не используйте в производстве, это в состоянии POC
Основной пример доступен в каталоге 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/spliting-your-secret
https://www.geeksforgeeks.org/shamirs-secret sharing-algorithm-cryptography/
https://ericrafaloff.com/shamirs-secret sharing-scheme/
Схема секретного обмена Sharmir предлагает теоретику информации, что означает, что математика, которую мы исследовали, оказалась неразрывной, даже против злоумышленника с неограниченной вычислительной мощью. Тем не менее, схема все еще содержит несколько известных проблем.
Например, схема Шамира не производит проверенные акции, что означает, что люди могут свободно представлять фальшивые акции и предотвратить реконструкцию правильного секрета. Адверслящий акционер с достаточным количеством информации может даже привести к другому долю, так что SS реконструируется до стоимости по своему выбору. Этот вопрос рассматривается с помощью проверенных схем обмена секретом, таких как схема Фельдмана.
Другая проблема заключается в том, что, поскольку длина любой конкретной доли равна длине ассоциированного секрета, длина секрета легко просочивается. Эта проблема тривиальна для решения, просто заполняя секрет фиксированной длины, которая должна быть выполнена с помощью натрия, как показано в примерах.
Наконец, важно отметить, что наши опасения по поводу безопасности могут выходить за рамки только самой схемы. Для применений в криптографии реальной мировой промышленности часто существует угроза атак по боковым каналам, в которых злоумышленник пытается извлечь полезную информацию из времени применения, кэширования, разлома и многого другого. Если это беспокоит, то при разработке следует принять тщательные соображения, такие как использование постоянных функций и поисков, предотвращение воспоминания от пейджинга на диск и множество других вещей, которые выходят за рамки этой библиотеки.