MENU

強力な暗号「ワンタイムパッド」とは?

はじめまして!インターン生のmomoです!
普段は、大学院で暗号理論の研究をしています✏️

いきなりですが・・・

普段、暗号の安全性って考えたことありますか?

本記事では、ビット演算子の一つである「排他的論理和」を用いた暗号の紹介をします♬

目次

ワンタイムパッドとは?

ちょっと変わった暗号方式 “ワンタイムパッド” を紹介します!
※ワンタイムパスワードとは別物です。

この暗号を一言でいうと、「 安全性が高いけど、不便な暗号方式 」 ですかね。
暗号って「安全だから良い!」ってわけではないのです・・・

仕組みはシンプル。

排他的論理和(XOR)を利用して平文を暗号化する

これだけです。

ここで、排他的論理和(XOR)について復習すると・・・
AB を以下のように入力した時に、 A ∨ B として出力される論理演算です!

ワンタイムパッドは、この論理演算を利用して暗号化しています!

実際に、例を用いてワンタイムパッドの仕組みを見ていきます🌱
例えば、平文と秘密鍵が以下のように与えられたとき、排他的論理和を考えると、暗号文は以下のようになります。

ワンタイムパッドの実装

Pythonでワンタイムパッドを実装してみました👇

import random

plain_text = "1010010101"

secret_key = ""
for _ in range(len(plain_text)):
    secret_key += str(random.randint(0, 1))

cipher_text = ""
for i in range(len(plain_text)):
    xor = int(plain_text[i]) ^ int(secret_key[i])
    cipher_text += str(xor)

print(f"平文: {plain_text}, 秘密鍵: {secret_key}, 暗号文: {cipher_text}")

実装結果

平文: 1010010101, 秘密鍵: 0101001000, 暗号文: 1111011101

ポイント!

  • secretKey (秘密鍵) は、plainText (平文) と同じ長さをとってくる。
  • secretKey (秘密鍵) は、ランダムに設定する。
  • 1ビットずつ排他的論理和を計算する。

ワンタイムパッドの特徴

メリット
暗号化も復号化も仕組みがシンプル。
乱数を用いることによって、暗号化の安全性が高い。

デメリット
平文と秘密鍵は同じ長さである必要があるため、平文が長くなると秘密鍵も長くなってしまう。
送信者と受信者で事前に秘密鍵を共有しておく必要がある。

余談

ワンタイムパッドは、1917年にギルバート・バーナムが発案し、数学者クロード・エルウッド・シャノンによって安全性が示された暗号です。

また、太平洋戦争で日本陸軍が利用したことで有名です。

まとめ

ワンタイムパッドは排他的論理和を用いて暗号化する暗号方式!
安全性は高いけど、秘密鍵の共有に手間がかかるため不便なのです(泣)

参考文献

Johannes A. Buchmann 著、林芳樹 訳「暗号理論入門」 2001/07/01第1刷 Springer-Verlag Tokyo
岡本栄司 著、林芳樹 訳「暗号理論入門」 2002/04/10第2刷 共立出版

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

miracleaveはワクワクする最高のITサービスをユーザーに提供するテクノロジー集団です。
「ITでワクワクできる未来へ」をミッションに掲げ、楽しいを創り出す組織から、お客様に感動を与えるようなサービスを届けること、そして、新たな挑戦をする人をデジタルコンテンツの力で後押し、幸せな未来を作っていきたいと考えています。

目次