teqneers/shamir

这是PHP中Shamir共享密钥的实现。它允许您使用PHP类或CLI界面创建共享密钥。

2.0.0 2023-12-21 15:44 UTC

This package is auto-updated.

Last update: 2024-09-22 14:50:56 UTC


README

构建状态: Scrutinizer Code Quality Code Coverage Code Climate

项目信息: License GitHub code size in bytes

这是PHP中Shamir共享密钥的实现。它允许您使用PHP类或CLI界面创建共享密钥。

密码学算法由著名学者Adi Shamir创建,他也将自己的名字贡献给了Rivest-Shamir-Adleman密码系统(RSA)。共享密钥算法允许将秘密分割成多个部分(称为份额)。每个份额可以分配给一个人或组织。这个算法的优点是,需要一些或所有份额才能恢复秘密(称为阈值)。安全共享秘密最重要的特点是,它符合以下要求

  • 一个份额的泄露不会向攻击者提供更多线索
  • 需要预定义数量的份额来获取秘密
  • 只知道除一个以外的份额,其知识并不优于不知道
  • 组合后的份额长度与秘密本身相同

此实现可以处理超过256个份额,并以压缩但可读的方式编码结果。

使用方法

# bin/shamir.php
Shamir's Shared Secret CLI 2.0.0

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  help            Displays help for a command
  list            Lists commands
 shamir
  shamir:recover  Recover a shared secret
  shamir:share    Create a shared secret

CLI示例

# bin/shamir.php shamir:share
The secret to share: Share my secret
Number of shared secrets to create [3]:
Number of shared secrets required [2]:

  102014%5g0m1p21485434261-3t215p3k3+
  102022i2v4o0q1.1*223m3p1a521:2;4t5b
  102035o012;5e1q5i4w3-4%0p0x1u08060;

# bin/shamir.php shamir:recover
Shared secret [empty to stop]: 102014%5g0m1p21485434261-3t215p3k3+
Shared secret [empty to stop]: 102035o012;5e1q5i4w3-4%0p0x1u08060;
Shared secret [empty to stop]:

  Share my secret

# bin/shamir.php shamir:share "Share my secret"

  10201241j1x042l0m1j3n530c16123m1w3r
  102022f0o1e3g2v0c0j4f3w3v015r4k184s
  102032q5g0-0+2+0256572g1i4s4k5i0t5t

# echo -n "Share my secret" | bin/shamir.php shamir:share

  102014k3:4:371u0i042i0p343t1i0h1l55
  102021f5h1,3z14043l250i3s520r3*0v1*
  102033*194n4i0n5m161,0b470x5n1z5s4l

# bin/shamir.php shamir:share -f path/to/secretFile

  10201010-2p4+1:1c4947512b2-194,2,4*
  102023+582#1q1k1,0c5s3s1*3o091i3i1q
  10203243y3g3#122h221h2a1s484+3v3%3*

# bin/shamir.php shamir:recover "10201241j1x042l0m1j3n530c16123m1w3r" "102032q5g0-0+2+0256572g1i4s4k5i0t5t"

  Share my secret

# bin/shamir.php shamir:share -s 4 -t 3 "Share my secret"

  10301043625274u011,0910183+0.112e2*
  103021f0c2t5f1k3s494w1;221x4%3o1k0a
  103035q563y0t40043:4.3e571j3e4g5g07
  103041i0r5k5a0+0:0y0l5f4.2%1n3m2s2x

# bin/shamir.php shamir:recover "10301043625274u011,0910183+0.112e2*" "103035q563y0t40043:4.3e571j3e4g5g07" "103041i0r5k5a0+0:0y0l5f4.2%1n3m2s2x"

  Share my secret

PHP示例

#!/usr/bin/env php
<?php
require_once __DIR__ . '/../vendor/autoload.php';

use TQ\Shamir\Secret;

$shares = Secret::share('Shamir\'s Shared Secret Implementation in PHP', 5, 2);

var_dump($shares);

var_dump(Secret::recover(array_slice($shares, 0, 2)));
var_dump(Secret::recover(array_slice($shares, 1, 3)));

需求

PHP 8.1.0或更高版本

集成

Tiki Wiki CMS Groupware: https://doc.tiki.org/Shared-Secret

许可

PHP中的Shamir共享密钥受MIT许可协议的许可 - 有关详细信息,请参阅LICENSE文件