Jangan gunakan dalam produksi, ini berada di negara bagian POC
Contoh Dasar tersedia di Direktori 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-with-shamirs-secret-sharing-scheme/
https://www.geeksforgeeks.org/shamirs-secret-haring-algorithm-cryptography/
https://ericrafaloff.com/shamirs-secret-haring-scheme/
Skema berbagi rahasia Sharmir menawarkan keamanan informasi-teori, yang berarti bahwa matematika yang kami jelajahi telah terbukti tidak bisa dipecahkan, bahkan terhadap penyerang dengan kekuatan komputasi yang tidak terbatas. Namun, skema ini masih mengandung beberapa masalah yang diketahui.
Misalnya, skema Shamir tidak menghasilkan saham yang dapat diverifikasi, yang berarti bahwa individu bebas untuk mengirimkan saham palsu dan mencegah rahasia yang benar direkonstruksi. Pemegang saham permusuhan dengan informasi yang cukup bahkan dapat menghasilkan bagian yang berbeda sehingga SS direkonstruksi dengan nilai pilihan mereka. Masalah ini ditangani oleh skema berbagi rahasia yang dapat diverifikasi seperti skema Feldman.
Masalah lain adalah bahwa karena panjang setiap bagian yang diberikan sama dengan panjang rahasia terkait, panjang rahasia mudah bocor. Masalah ini sepele untuk diperbaiki hanya dengan memadukan rahasia ke panjang tetap yang harus dilakukan dengan natrium seperti yang ditunjukkan dalam contoh.
Akhirnya, penting untuk dicatat bahwa kekhawatiran kami tentang keamanan dapat melampaui skema itu sendiri. Untuk aplikasi kriptografi dunia nyata, seringkali ada ancaman serangan saluran samping, di mana penyerang mencoba mengekstraksi informasi yang berguna dari waktu aplikasi, caching, kesalahan, dan banyak lagi. Jika ini menjadi perhatian, pertimbangan yang cermat harus dilakukan selama pengembangan, seperti menggunakan fungsi waktu dan pencarian yang konstan, mencegah memori dari paging ke disk, dan banyak hal lain yang berada di luar ruang lingkup perpustakaan ini.