一方向性関数
関数だよ
結果(戻り値)から原因(引数)を推測するのが難しいよ
簡単に書くよ
一方向性関数(読:イチホウコウセイカンスウ 英:oneway function)とは
結果(出力:戻り値)を基にして、その結果を得るに至った原因(入力:引数)を見つけるのが「ちょー難しいんですけどー」な関数
(処理のまとまり)のこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・関数
・引数(ヒキスウ)
・戻り値
について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。
引数は「プログラムや関数に渡す値」です。
戻り値は「プログラムや関数から戻ってくる値」です。
ちょっと汚い話で恐縮ですが、人間は ご飯を食べて、ウンチを出します。
人間を関数だとすれば、ご飯に相当するものが引数です。
ウンチに相当するものが戻り値です。
以上を踏まえて
出力を見ても入力が何か分からない関数
が「一方向性関数」です。
言い方を変えると
戻り値を見ても引数が推測できない関数
です。
先ほどの例で言えば、ウンチを見て「ん?この粒は……さてはトウモロコシを食べたな!」のような推測ができれば一方向性関数では ありません。
ウンチを見ても「う~ん、何を食べたか分からないなぁ」と食べたものが推測できなければ一方向性関数です。
……汚い話で終わるのもアレなので、もう少しキレイな例も載せておきましょう。
例えば、そうですね。
ここに1つの怪しい箱が ありました。
この箱にミカンを1つ入れると、ケーキが1つ出てきます。
この箱にミカンを2つ入れると、ケーキが2つ出てきます。
おっと、ちょっと目を離した隙をついて、ピヨ太君が何か入れたようです。
箱からケーキが3つ出てきました。
ピヨ太君は何を入れたでしょう?
ピヨ太君が何を入れたのか、何となく想像がつきますよね。
ミカンを1つ入れるとケーキが1つ出てきます。
ミカンを2つ入れるとケーキが2つ出てきます。
何かを入れたらケーキが3つ出てきました。
きっと、ピヨ太君はミカンを3つ入れたのでしょう。
このような「出てきたものから入れたものを推測できる関数」は一方向性関数ではありません。
さて、もう一個、似たような箱が ありました。
この箱にミカンを1つ入れると、ケーキが1つ出てきます。
この箱にミカンを2つ入れると……おや、イチゴが3つ出てきました。
おっと、ちょっと目を離した隙をついて、ピヨ太君が何か入れたようです。
箱からはピヨ子さんが出てきました。
ピヨ太君は何を入れたでしょう?
今度は「そんなの、しらねーよ!」となりますよね。
ミカンを1つ入れるとケーキが1つ出てきます。
ミカンを2つ入れるとイチゴが3つ出てきます。
何かを入れたらピヨ子さんが出てきました。
法則性は皆無です。
何を入れたらピヨ子さんが出てくるのかなんて、想像もつきません。
このような「出てきたものから入れたものを推測できない関数」が一方向性関数です。
一方向性関数は暗号化のあれやこれやで使われていたりします。
興味がある方は他のところで勉強してください。
一言でまとめるよ
まぁ「一方向性関数」って単語が出てきたら「出力から入力を推測するのが難しい関数
(処理のまとまり)なんだな~」と お考えください。
おまけ
■検索してみる?






