はじめに ~~
今回は、セキュリティー通信についての私なりのアイデアを披露・共有させていただきます。
よろしければ、最後までお付き合いください。
本題 ~~
「ハッシュ, Hash」については、みなさんご存じの通り、データのダイジェストを生成する技術のことですが、この記事の中で、私が提案したいのは「マッシュ, Mash」のほうです。では、マッシュとはどのような手法・技術なのかについて説明したいと思います。
ここで、その概要について説明します。まずは、所与の元データをランダムに加工・変換する手順を決定します。これを「レシピ」と呼びます。そのレシピを受け取り側に送信します。ついで、送り手側が元データをレシピ通りに加工・変換します。これを「マッシュ化」と呼びます。
※マッシュ化とは、具体的には、元データの並びを入れ替えたり、元データにダミーのデータを混ぜ込んだりすること。
マッシュ化されたデータを複数のパケットに分割してランダムな時刻に送信します。最後に、受け取り側でパケットを合体させた上で、レシピとは逆の手順でデータを加工・変換します。すると、元通りのデータが得られます。ちなみに、加工・変換されたデータを「マッシュ」と呼びます。
以下に、手順をわかりやすく、かつ詳細に整理してみました。
- レシピの決定: 元データをチャンクに分解してランダムに加工・変換する手順(=レシピ)を決定します
- レシピの送信: レシピを受け取り側に送信します
- マッシュ化: 送り手側が元データをレシピ通りに加工・変換します
- ブロックの作成: マッシュ化されたチャンクをブロックにまとめます
- パケットの作成: それぞれのブロックをパケットに収納します
- ランダムな送信: それぞれのパケットをランダムな時刻に送信(=時間差送信)します
- 受信パケットの解体: それぞれのパケットから各ブロックを取り出します
- ブロックの解体: それぞれのブロックを取り出して各チャンクを取り出します
- 逆マッシュ化: レシピとは逆の手順で各チャンクを逆加工・逆変換します
- チャンクの合体: 受け取り側でチャンクを合体させます
さらに、セキュリティーを強化するために、分割後の各ブロックに「相互ハッシュ」をつけるということも考えられます。たとえば、ブロックが全部で「A, B, C」の3つあった場合、ブロックAに、B, Cのハッシュを付加して、ブロックBに、A, Cのハッシュを付加するという具合にです。これにより、通信途上での窃視を防ぎつつ、データの改竄を検出しやすくなります。
おわりに ~~
この手法・技術が実際にリファレンス実装されて、世の中に普及するかどうかはわかりません。しかし、単純に面白いと思ったので、記事にして共有させていただければと思いました。
また、なにか面白いアイデアが思いついたら、記事にして投稿したいと思います。
それでは、また~。