いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

秘密を分散する

 ある整数値が決められました。例えば金庫の解錠の番号だとしましょう。安全のため、長目に12桁です。この金庫はある人の所有物で、この人以外の4人にも解錠できるようにしたいと考えています。しかし4人全員が解錠の番号を知っていると、ある1人が悪い気を起こして鍵を開けて中身を持ち出してしまうかも知れません。だから4人のうち、2人そろわないと開けられない(解錠の番号が分からない)が、どの2人でも、2人がそろえば開けられるようにしたいとします。しかも1人だけでは番号のほんの一部も分からない、というのが望ましいでしょう。従って、12桁のうちの7桁くらいを1人ずつに教えておく、なんていうのはやめておきましょう。うまくすればどの2人が集まっても全ての桁が明らかになるように教え方を工夫できるのかも知れませんが、こういうやり方だと7桁分を知っているある1人が、残る5桁を総当たりで調べて無理矢理開けてしまうかも知れない、としておきましょう。さて、どうですか?
 難しそうですが、実は可能です。閾(しきい)値秘密共有分散法と言います。話を簡単にするため、秘密の番号を2桁として、14だとしましょう。これを使って、y=3x+14(3は適当に決めた)という式を作ります。直線の式ですね。グラフのy切片が金庫のダイヤルの番号、というわけです。この式は4人には教えません。1人目にはこの式でx=1として計算したy=17を教えます。2人目にはx=2として計算したy=20を教えます。同様に3人目にはx=3としてy=23を、4人目にはx=4としてy=26を教えます。これで例えば2人目、4人目が集まれば(2,20)、(4,26)という平面の2点が分かり、直線が1本に決まりますから切片(つまり解錠の番号)を求められる、という仕掛けです。しかも、どうですか? 1人だけでは切片についてはだいたいの値すら分からないのです。理屈では分かりますが不思議に思えます。4人は切片についての非常に重要な情報を持っているのですが、1人では何もできないのです。
 この方法は他のいろいろな人数で使えます。例えば6人いてそのうちの4人がそろえば秘密の番号が分かる、ということもできます。この場合は3次関数の式を使います。さっきと同じく秘密の番号を14として、

f:id:Inuosann:20191023195543p:plain

といった式を作ります(定数項以外は適当に決めた。この式は6人には秘密)。そして1人目には(1,12)、2人目には(2,30)、……と教えます。6人のうちの4人がそろえば3次関数のグラフが通る平面の4点が分かり、3次関数の式が求まって切片(グラフがy軸を横切る点)が分かるのです。4点から式を求めるときには4元の連立方程式(変数が4個)を解かなければなりませんが、パソコンでも使えばすぐです。
 これ、要するに秘密の分散ということです。大事な秘密を個人だけの自由にしない方法です。前にも紹介した『情報セキュリティの科学―マジック・プロトコルへの招待』(太田和夫、渡辺治、黒沢 馨1995講談社ブルーバックス)に載っていました。楽しい話満載です!