ホームページ > バックエンド開発 > Python チュートリアル > 追加的な秘密共有と共有の自動化 - Python を使用

追加的な秘密共有と共有の自動化 - Python を使用

WBOY
リリース: 2023-08-18 15:05:45
転載
1610 人が閲覧しました

加法的秘密共有は、一定数の参加者が集まって共有を提供した場合にのみ秘密を再構築できるように、参加者のグループに秘密を共有する方法です。このテクノロジーは、暗号化と安全なマルチパーティ計算で広く使用されています。この記事では、追加的秘密共有と共有事前アクティブ化の概念と、Python を使用してそれらを実装する方法について説明します。

加法的秘密共有の概要

加法的秘密共有は、個々の参加者に秘密を明かすことなく、参加者のグループが秘密を共有できるようにする手法です。秘密はいくつかのシェアに分けられ、各参加者が 1 つずつ受け取ります。秘密は、一定数の参加者が集まり、シェアを提供する場合にのみ再構築できます。この手法は、しきい値秘密分散とも呼ばれます。

加法的秘密分散の基本的な考え方は、秘密を次数 (t-1) の多項式として表現することです。ここで、t はしきい値です。多項式の係数がランダムな整数になるように選択します。次に、各参加者には、そのシェアを表す多項式上の点が割り当てられます。参加者が提供したポイントを使用して補間することで、秘密を再構築できます。

たとえば、3 人の参加者 A、B、C の間で共有したい秘密 S があるとします。ランダムな係数を持つ 2 次多項式を選択します。この多項式は S(x) = a0 a1x a2x^2 として表されます。次に、各参加者に多項式上の点 (x, S(x)) が割り当てられます。ここで、x は各参加者に対して選択された一意の値です。

Participant A receives the point (1, S(1))
Participant B receives the point (2, S(2))
Participant C receives the point (3, S(3))
ログイン後にコピー

ここで、2 人のプレイヤーが集まって得点を提供すると、多項式を再構築できるため、秘密が得られます。ただし、1 人の参加者がポイントを提供するだけの場合、秘密を再構築することはできません。

Python での追加的秘密共有の実装

Python で追加的秘密共有を実装するには、「secretsharing」と呼ばれる Python ライブラリを使用できます。これは、しきい値秘密を実装するための使いやすい API を提供します。共有すること。このライブラリは、シークレット、共有数、およびしきい値を入力として受け入れ、共有のリストを返す「split_secret」と呼ばれる関数を提供します。

これは、「split_secret」関数を使用して 3 人の参加者間でシークレットを共有する例です -

from Secretsharing import SecretSharer

# Secret to be shared
secret = "mysecret"

# Number of shares to be generated
n = 3

# Threshold value
t = 2

# Generate shares
shares = SecretSharer.split_secret(secret, n, t)

# Print the shares
for share in shares:
   print(share)
ログイン後にコピー

上の例では、参加者3人で共有したい秘密「mysecret」。しきい値を 2 に設定します。これは、任意の 2 人の参加者がシークレットを再構築できることを意味します。 「split_secret」関数は 3 つの共有を生成し、それらを印刷します。

シークレットを再構築する

シークレットを再構築するには、「secretsharing」ライブラリによって提供される「recover_secret」関数を使用できます。この関数は、共有のリストを入力として受け取り、シークレットを返します。 「recover_secret」関数を使用してシークレットを再構築する例を次に示します。

from secretsharing import SecretSharer

# List of shares
shares = ["1-mysecret", "2-mysecret", "3-mysecret"]

# Reconstruct the secret
secret = SecretSharer.recover_secret(shares)

print(secret)
ログイン後にコピー

上の例では、シークレットの再構築に使用する株式のリストがあります。 「recover_secret」関数は、株式のリストを入力として受け取り、シークレットを返します。この例では、シークレットは「mysecret」です。

共有プロアクティブ化の紹介

共有プロアクティブ化は、参加者のグループが秘密を明かすことなく積極的に共有を更新できるようにするテクノロジーです。この手法は、共有パスワードの場合など、シークレットを頻繁に変更する必要がある状況で使用されます。

共有プロアクティベーションの基本的な考え方は、各参加者が新しいシークレットの新しい共有を生成し、それを他の参加者に送信するというものです。その後、新しい共有が結合されて、新しいシークレットが再構築されます。古い共有は破棄され、新しい共有は新しい秘密を再構築するために使用されます。

Python での共有のアクティブ化の実装

Python で共有のアクティブ化を実装するには、追加の秘密共有と同じ「秘密共有」ライブラリを使用できます。このライブラリは、シークレットと一意の共有 ID を入力として受け入れ、新しいシークレット共有を返す「create_share」と呼ばれる関数を提供します。

これは、「create_share」関数を使用して共有をアクティブに更新する例です -

from secretsharing import SecretSharer

# New secret
new_secret = "mynewsecret"

# Share ID
share_id = "1"

# Create a new share
new_share = SecretSharer.create_share(new_secret, share_id)

print(new_share)
ログイン後にコピー

上の例では、3 人で共有したい新しいシークレット「mynewsecret」があります。参加者間で共有されます。また、新しい共有を生成する参加者を表す共有 ID「1」もあります。 「create_share」関数は、新しいシークレットと共有 ID を入力として受け取り、シークレットの新しい共有を返します。

新しいシークレットを再構築するには、以前と同じ「recover_secret」関数を使用できます。ただし、今回は各参加者が生成した新しい株式を使用します。

from secretsharing import SecretSharer

# List of new shares
new_shares = ["1-mynewsecret", "2-mysecret", "3-mysecret"]

# Reconstruct the new secret
new_secret = SecretSharer.recover_secret(new_shares)

print(new_secret)
ログイン後にコピー

上の例では、新しいシークレットを再構築するために使用する新しいストック リストがあります。 「recover_secret」関数は、新しい株式のリストを入力として受け取り、新しいシークレット (この場合は「mynewsecret」) を返します。

結論

付加的秘密共有と共有自動化は、参加者のグループ間で機密情報を安全に共有するために使用できる強力な技術です。 Python の「secretsharing」ライブラリは、これらの手法を実装するための使いやすい API を提供します。 「split_secret」関数と「create_share」関数を使用すると、それぞれ追加的秘密共有と共有自動化を簡単に実装できます。さらに、「recover_secret」関数を使用すると、シークレットまたは新しいシークレットを簡単に再構築できます。

以上が追加的な秘密共有と共有の自動化 - Python を使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート