WHAT'S TIME-LOCK CRYPTOGRAPHY?

タイムロック暗号とは

タイムロック暗号(Time-Lock Puzzle)とは、「送信者を含む誰も、あらかじめ決められた時間が経過するまで復号できない」ことを数学的に保証する暗号方式です。「情報を未来へ送る」ことを目標に、1996年に Ron Rivest、Adi Shamir、David Wagner によって提案され、技術が確立されました。Rivest と Shamir は、RSA暗号の生みの親でもあります。

最新鋭のコンピュータでも解くのに時間がかかる複雑なパズルをその場で生成し、パズルの答えを鍵とした錠前でリンクやファイルを完全にロックします。

仕組み

パズルの中身はシンプルな二乗計算のくり返しです。x を二乗して巨大数Nで割り、その余りをまた二乗してNで割る、その余りをまた二乗して…——このプロセスを数万回〜数億回マシンにくり返させることで任意の計算負荷を発生させ、復号までにかかる時間を自由に調整することができます。

x → x² → x⁴ → x⁸ → …  (mod N)

なぜスキップできないのか

計算を速く行うには、マシンを並列化し、複数の計算機やコアで処理を分散させる方法がありますが、タイムロックの逐次計算方式にはこれが効きません。

前述の式を見ると、各ステップは一つ前のステップの答えを入力にしているのがわかります。一つ前の答えが分からなければ次に進めないので、並列マシンによる同時並行処理は不可能になっています。

結果として、復号にかかる時間はCPUのシングルスレッド性能と設定された計算回数だけに依存することになります。

Brake. での実装

Brake. では、暗号化リクエストを受けとると、まずランダムな底 x₀ と2つの巨大な素数 p, q が生成され、次に p, q の積 N = p×q を法(modulus)として逐次平方パズル(時間鍵)が作成されます。この計算を何回行うかは、指定された復号時間から逆算して求められ、決定されます。

暗号化プロセスはすべて、ユーザーのブラウザ内(JavaScript の BigInt)だけで完結します。サーバーには暗号化されたデータと、パズルの情報だけが送られ、元データや鍵がサーバーに渡ることはありません。これにより、万が一悪意のある第三者に攻撃を受けても、ファイルの中身が漏洩することはありません。

復号が始まると、計算はユーザーのデバイス(PC、スマホ)が行います。