読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

番外編・誤り検出符号の話

コンピューター全般

妹「兄が買ってきた新型ゲーム機にカセットを突っ込んでるんだけど、ちゃんと読み込めた時にゲームの名前が出てくるのは、カセットの中に名前とかが書き込んであるってわけじゃないよね?」

「そういうわけじゃないよ。ゲームの名前のデータの一覧表が入ってて、それに一致したら名前が出るようになってる。パソコンのCDプレイヤーでもそういうのがあったと思う」

妹「そしたらゲームとかCDとかのデータが全部入ってるの? 凄い容量になるのでは……」

「そんなことはしないよ。容量もだけど、データ全部入れるってことは、コピーしたデータの入った製品を売るということになるから。そうじゃなくて誤り検出符号が使われてるはず」

妹「誤り検出符号?」

「一番単純なやつ言えば、チェックサムというのがある。仮に数字のパスワード、1234567890という10桁の番号があるとする。これを1桁ずつの足し算、1+2+3+4+5+6+7+8+9+0で、45という数字になるから、10桁の数字は忘れて、45だけを保存しておく。で、パスワードを入力された時にも、全部足して時に45になるか調べると、元の番号が無くてもチェック出来る、という仕組み」

妹「足し算で……でも足し算というのは逆から足しても同じになるわけだから、0987654321って入れても通っちゃうのでは?」

「通っちゃうんだよ。同じ数字が1回ずつ使われてさえ居れば、順番関係なく通る。だから最近は足し算じゃなくてもっと高度な計算式を使うようになってる。ハッシュ関数といって、md5とかSHA-1とか、まあ色々しゅるいがあるんだけど、元のデータと別の、チェック用のデータを使うのは同じ。これは時間の短縮にもなる。仮に元データがあるとしても、1バイトずつチェックしてたら時間かかるから」

妹「こういうのってゲームにも使えるんじゃないの?」

「UE4でも使われてるけど、あんまり目に見えるとこでは使わないかな。オンラインゲームならパスワードの保存に使うけど」

妹「パスワードって、パスワードって欄に書き込むやつだよね? あれは別に全部保存しといてもいいんじゃない? 容量もそんなになさそうだし、チェックするのに時間もかからないし」

「パスワードの場合はそういうのじゃなくてセキュリティ上の理由だよ。パスワードそのものがゲーム会社とかにあると、悪い人がそこから盗んでいく可能性があるから。よく流出事件とか聞くでしょ? でも誤り検出符号が流出しただけなら、パスワードの文字はわからないままだから、同じIDとパスワードで他のサイトにログインしてみるとか、そういった悪さは出来ない」

妹「うーん、でもそれだとゲーム会社の人もパスワードわからないんだから、わたしがパスワード忘れちゃったら誰にもわからなくなるのでは?」

「元のパスワードがなんだったかはわからないままだけど、新しいパスワードに設定することは出来るから。それ言ってるのが本人かどうかは電話とかメールとか別の方法で確認する。時々パスワード忘れたって言うとメールにパスワード書いて送ってくる会社があるけど、そういうとこは信用したらいけない。セキュリティ意識がだいぶ低いってことだから」

妹「銀行の暗証番号は? これもハッシュ関数を使ってるの?」

「知らないけど使ってないと思う。だってどんなに複雑な関数使っても、結局は10000通りしかないからね。銀行の場合は、番号だけ流出してもカードが無ければ無意味だし、カードだけあっても番号があっても無意味だ、という仕組みになってる。店にはカメラとかも付いてるし、番号3回間違えたらその日はもう試せないとかもある。それでも若干不安ではあるけど、インターネットで4桁しか使えないところは駄目だと思う」