排他的論理和を使ったセキュアな暗号化を考えた

スポンサーリンク
排他的論理和を使ったセキュアな暗号化を考えた日記ブログ
排他的論理和を使ったセキュアな暗号化を考えた
この記事は約5分で読めます。

ドコモ口座を利用した不正送金被害が発生してしまいました。

詳細は以下のブログが、わかりやすかったです。

原因

  1. 預金者の情報(名義・口座番号・キャッシュカード暗証番号)不正入手できたこと。
  2. ドコモ口座を預金者の本人確認なしで作れたこと。

1項は基本中の基本です。が、だとしても悪用されない仕組みがネットの世界では必須です。

そう考えると、ドコモ側にも十分な罰則(被害者へ還元すべき)が必要と考えます。

まっ、ドコモですからね。ズサンなところはIT企業として恥をしるべき。

「ネットワーク制限を△へ」罪を認めろドコモ以外に犯人はいないだろ!
私のiPhoneはApple純正のSIMフリー端末です。 私のAppleから購入した純粋なSIMフリー端末に対し、ドコモは何の権限もなく「ネットワーク利用制限”△”」をつけていた事実を公開します。 2017年10月1日のお話です...

先日のドコモの会見での会話です。

女性
記者

なぜ、本人確認無しで口座を開設できる仕組みにしたのか?

男性
ドコモ

皆さんに利用していただきたかったからです。

本人確認の有無に関わらずサービス利用はできる。セキュリティを甘くした回答になっていない。と突っ込みたい。

また、金融庁もこのようなズサンな業務開始に対して、チェックはしないものなのか?と疑問も感じた。

さて。

評論するのはこれくらいにして、我々利用者もセキュリティに対する意識を高めることも必要ですね。

私も私なりに暗号化について考えてみたことがあるので紹介します。

スポンサーリンク

排他的論理和を使った暗号技術

排他的論理和ってご存知でしょうか?

一言で言うと「XOR」という論理的な計算方法のことです。

2つのビット比較をして、どちらか1つが真だったら真、それ以外は偽という計算方法だ。

ちなみに、このようなことが苦手な方はスルーしてください。面倒臭いお話が続くので・・。

排他論理和の計算方法

具体的には「真:1、偽:0」として見ると以下のパターンで計算される。

  • 0:0=0
  • 0:1=1
  • 1:0=1
  • 1:1=0

このように手法自体は簡単な論理計算です。

排他論理和と暗号化

暗号化前の情報

暗号化前の情報を“BLOG”として暗号化してみる。

“BLOG”を16進数で表す:16進数コード

  • B=42(16進数)=01000010(2進数)
  • L=4C(16進数)=01001100(2進数)
  • O=4F(16進数)=01001111(2進数)
  • G=47(16進数)=01000111(2進数)

01000010010011000100111101000111

このように“BLOG”は、32 桁の0・1で表すことができます。

鍵となる32桁の乱数を作成

XORで計算するもう一つの鍵は、“乱数で作成”した数字を使う。

私が適当に乱数を決めることにしたが、ここはみなさんが自由に決めて構いません(私はキーボードを適当に叩いてみた)。

②00010101111010010011010101000101(私が決めた乱数)

①と②を排他的論理和で計算し、★を作ってみる。(排他論理和の計算方法と参照ください)

左列から順番に①と②を縦に比較していきます。

①:01000010010011000100111101000111
②:00010101111010010011010101000101(乱数で作成)
★:01010111101001010111101000000010(①と②のXOR比較)

左から一番目の列は①は0、②は0なので、★は0となります。
左から二番目の列は①は1、②は0なので、★は1となります。
左から三番目の列は①は0、②は0なので、★は0となります。
左から四番目の列は①は0、②は1なので、★は1となります。
・・・
左から32番目の列は①は1、②は1なので、結果は0となります。

さてここで面白い状況をお知らせしたい。

①と②と★の3つのデータがあるが、このうちの2つのパーツがあれば残りのパーツをXORで簡単に計算することができる。

以下のような関係になっている。

  • XOR(①,②)=★
  • XOR(①,★)=②
  • XOR(②,★)=①

検算をしてみよう

今回のケースでは、②のパーツと★のパーツで①のパーツとなる”BLOG”を復元してみる。

②:00010101111010010011010101000101
★:01010111101001010111101000000010
答:01000010010011000100111101000111(②と★のXOR比較)

01000010(42)=B
01001100(4C)=L
01001111(4F)=O
01001000(47)=G

お見事!元に戻りました。

実際のビジネスでの利用

ビジネスの例で説明すると以下のとおりだ。

①=見積書(暗号化したいデータ)

②=両社間であらかじめ決められた乱数(桁数は大量に準備)

★=メール添付時の暗号された見積書

メール送信者:★をメール添付で送信する。

メール受信者:★を②で解凍する。

結果的にこの暗号の仕組みでは、②の乱数生成の仕方がポイントとなります。

Excelですと、セルに”=rand()”とすると、1未満の乱数が表示される。また、VBAを使用すれば、Randomizeで引数を渡して乱数の初期化ができる。

乱数を作ることは簡単です。

例えばドメイン名とタイムスタンプを乱数初期化の引数とし乱数を作ってもよい。また、単純に両社で決めた大量の乱数(HDDがいっぱいになるほど)を作り、メール送信の度に消費していくという考えでも良いと思う。

私としては後者のように使ったものが消費し、乱数が消去された方がセキュリティ性が高いと考えている。

この暗号化の優れているポイント

暗号化を解凍しても「合っている・間違えている」という概念ではなく、どのように解読しても「どれも正解で正しい」という考え方です。

そして本当の正解は乱数でしか解くことができない。

最後に

今回の「不正送金被害」に対する対策ではありませんが、何らかの暗号化では使えれば良いですね。

もちろんセキュリティも日々進化していると思うので、すでに排他的論理和で考えた以上の高い仕組みもあると思います。

乱数が鍵となる仕組みなので、乱数が売れる時代が来たりして・・・。

刹那
刹那

Appleカードは、カード自体に何も表示させない。というシンプルな発想もスマートでカッコ良い。

Apple Card
Apple Card is a better kind of credit card. And with Apple Card Monthly Installments, you can pay for a new iPhone with interest-free payments.
プッシュ通知を
3+
この記事を書いた人

埼玉県在住、謎解き好き・レゴ好き・家族を愛する一児の父です。主に休日にブログ更新しています。よければフォローお願いします。

刹那をフォローする
スポンサーリンク
日記ブログ
スポンサーリンク
** ささやかな気持ちでシェア **
子ども虐待防止「オレンジリボン運動」
刹那は「オレンジリボン」サポーター登録しています。
幼児・動物の虐待がなくなりますように!
MYSTな休日(休日の過ごし方)

コメント

  1. masakirio より:

    刹那さん、こんちには。
    16進数→2進数→乱数→★から作る暗号化、面白かったです(^^)v
    乱数を大量に作って、消費していくという段階で、ズレが生じた!
    なーんてことがあったら、わけわからないことになってしまうかな?
    とも思いましたが、心配ないですかね?

    1+
    • 刹那 より:

      りおさん。コメントありがとうございます。
      そうですね。万が一でもズレたら大騒ぎでドコモどころのレベルじゃなくなります。
      でも、今のインターネットの中やPCの中も大量のピットが流れているので、同じレベルだとは思います。
      データがズレずに流すってものすごい技術と感心します。

      1+
  2. 天機 より:

    刹那さん、こんばんは٩( ๑╹ ꇴ╹)۶
    そうですか。ドコモはそんないい加減なシステムで口座を運用していたのですね。
    憤慨しますね。
    しかし、乱数と暗号のお話は、とてもむずかしかったです((((;゚Д゚))))
    以前、「暗号解読」という本を読んだ時も、
    自分にはなかなか理解できなかったくやしい記憶があります。

    1+
    • 刹那 より:

      天機さん。コメントありがとうございます。
      ドコモの件は情けないですね。あとあと聞いた噂ですが、金融庁から当然のように指摘されて
      いたそうです(これがりそな銀行の件かも)が、それをドコモも金融庁もお互いに是正済と
      確認を怠ったようです。金融庁もドコモを信じちゃダメですね。
      大きい会社や組織は基本的に怠慢なんでしょうね。

      1+
タイトルとURLをコピーしました