こんにちは。くろこんです。今回は計算機科学を志す者が、本気で転売防止システムの思考実験をしました。
注意
あくまでも記事の著者による思考実験のため、情報の真偽性など、取り扱いには注意してください。
計算機科学を志す者 相対性理論を語る
物理法則ならばテンソル方程式で表せる
テンソル方程式が相対性を本質的に表している
相対性理論って言葉、かっこいいですよね!
……別に相対性理論である必要はありませんが、このように転売防止を数式風に落とすにはどうするかを考えます。
計算機科学を志す者 転売防止を語る
転売防止とは人を追跡することである
ものを追跡しても、転買を取り締まるだけで、転売を取り締まれない
最後には転買した人のところにものがあるから
転売防止の署名ならば保存量を有する
保存量を有する署名が本質的に人を追跡できる
上の方は、数式風に扱うための前提です。ものではなく人を追跡するということに重きをおく、というくらいの意味合いです。転売でなく転買を取り締まってもあんまり……というイメージです。
下の方は、かなり数学的な表現です。保存量という言葉は、理科の物理に近い範囲で出てくる言葉です。質量保存の法則、エネルギー保存の法則などは聞いたことがあると思います。数学的にいうなら同値類という考え方が相当します。
今回考える範囲では、より親しみのあるであろう保存量という言葉で統一していきます。
署名とは
ここでは署名を、文字列が正当な文字列であることを保証する方法、としています。
message_{sample} = \text{"pro_001 生産者"}
pubkey_{sample} = f\left( message , prikey \right)
\{ True, False \} \ni g\left( message, pubkey \right)
転売を防止したい人が $\text{"pro_001 生産者"}$ という内容を保証したいとしましょう。
この場合、2番目の式のように $prikey$ を使って $pubkey$ を文章に対して生成します。$prikey$ は保証用の秘密情報で、$pubkey$ はその秘密情報を知っている人しか計算できません。
そして、$pubkey$ と $g$ を公開します。$g\left( message, pubkey \right)$ は、$message$ に $\text{"pro_001 生産者"}$ を設定すると、先ほどの $pubkey$ のときのみ反応して $True$ を返します。(3つ目の式は、$g$を計算すると値が$True$か$False$になる、ということを表します)
この結果を見て、転売を防止したい人が公開した $pubkey$ で $\text{"pro_001 生産者"}$ は $True$ になるから、$\text{"pro_001 生産者"}$ は本当に転売を防止したい人が発信した文字列だ、と第三者も確認できる、ということです。
有名なものでは、素因数分解によるRSA署名や、楕円曲線を用いたECDSAなどがあります。
保存量が無い場合
上図のような署名の列があったとします。pro_001 生産者 などの文字列に対して公開鍵が公開されていて確認できる状態、ということです。
時系列で変化していて、pro_001 であれば、始めは pro_001 生産者 と署名され、次に pro_001 生産者 小売A と署名され、最後に pro_001 生産者 小売A 消C と署名されます。
最後の時点では、pro_001 は消費者Cが所有していることを表していて、もし pro_001 を消費者Eが所有していたら転売が判明するということになります。
ここで、転売したのは誰か? と考えると、単純には消費者Cということになります。
ただ、転売する側もそのように推理されることはわかっているので、転売したいので自分の名前で署名するのを避ける、署名を避けるため小売と結託する、などが想定されます。
まさに冒頭で触れた人を追跡できていなくてものを追跡している状態です。
保存量が有る場合
所有者数が保存する署名になったことで、時系列の後の方でも、現在の所有者のみが署名されるようになりました。ただ、このことは転売防止に対して本質的ではありません。
本質的なのは、
- 管理者(生産者)はすべての署名の方法を把握している
- 小売りは自分が持っている署名アプリでのみ署名ができる
- 小売りごとに異なる署名方法であって、他の小売りの署名方法はわからない
という署名のシステムとしての動きとなります。
例えば、pro_001を消費者Eが所有していたとします。今までと同じように転売が判明します。ただ、今回の場合は、転売したのは間違いなく消費者C(または消費者Cを起因とする誰か)となります。
なぜならば、小売は持ち主を変更する署名アプリをちゃんと使わないと自身が犯人だと疑われてしまうからです。
小売は自分に割り当てられたタイプの署名しかできないため、転売が発覚したときに生産者から「あなたに渡した署名アプリの署名で転売されていたから、あなたが犯人ですよね?」と言われてしまうのです。そのため、各小売が真面目に持ち主を変更する署名アプリを使っているだろうと仮定することができるのです。
こうなれば生産者の対応は簡単で、違反のあった署名アプリを使用不可にして、小売りと手を切ればいいわけです。転売されたものに関しては、もし pro_001 がゲーム機ならば、署名から製造番号を特定して、インターネット接続の拒否などもできます。
ゲーム機ならインターネット接続の拒否、というのは現在でもできていますが、小売り側も明に犯人が判明することが従来の転売防止方法と異なります。
さて、補足ですが所有者数が保存するというのは、生産者と小売の署名の権限の違いを表します。
生産者は所有者数が保存することを無視できて、例えば新品に所有者を設定することができます。言い換えると、図における通常署名は前の署名が存在しない新規の署名で、こういうことができるのは生産者だけ、と考えてもよいです。一方で、小売は自身が所有しているものの所有者を消費者に変更することしかできません。前の署名が存在する所有者変更の署名と考えることもできます。
この制約から、所有者が小売により変更されるときには所有者数が保存され、このことを数学的にいうと保存量を有するというのが一番きれいに表現できる、ということになります。
暗号現金とは
「もし pro_001 がゲーム機ならば」署名から製造番号を特定して、インターネット接続の拒否などもできる、ということでした。これは、言い換えると、pro_001 は署名用の文字列にできるIDなどがあれば十分で、どんなものであってもいい、と考えることもできます。
そこで、pro_001 を現金とすることを想定して、この技術に暗号現金と名付けました。
仮に、コンビニ強盗が起こった、としましょう。レジに入っている紙幣は小売Eのように持ち主が設定されています。その紙幣を使おうとすると、なぜ一般の買い物客が小売……? となって異変を検知できます。
また、スリが起こった、としましょう。その紙幣は、元の持ち主のまま変更されていません。もし、レジに紙幣の持ち主の特徴(性別、年代、身長など、あらかじめ消費者が設定しておく)を表示する機能があれば、見た目が違う……? となって異変を確率的とはいえ検知できます。
ただ、技術としては未完成で、自分の子供にお小遣いとして紙幣を渡すと、スリか!? と言われてしまうなど、細かい調整は必要な状態です。
まとめ
今回、暗号現金として紹介させてもらったのは、従来の現金のように使用できながら、暗号資産のように追跡性を有する技術ということでした。商品に応用することで、転売ヤーの検知も高い品質で行えます。
個人的な気持ちとしては、暗号資産が有名になったことで、暗号技術ってうさんくさいものなのでは? というイメージがあるような気がしています。いやいや、全然役に立つ技術なんですよと言えたらいいと思っていて、本気で取り組んでみました。結果、結構いいものになったと思います。
以上で今回の記事は終わりになります。より計算機科学のことを知ってもらえればよいかなと思います。
おまけ 商標登録検索してみた
2025/12/15 に商標で検索しましたが、「暗号」でも「現金」でも「暗号現金」はひっかからないです。いい名前です!
Copilot に英語だとどうなるか聞くと、 Cryptographic Cash になって、 Cryptographic と修飾語でくっつけるのがコツだそうです。