増井ラボノート コロンブス日和

第14回 HashInfo

この記事を読むのに必要な時間:およそ 3 分

重要情報のバックアップ

前述の方法を使うと,複数のマシンでHashInfoを計算することによって,さまざまなマシンで同じファイルが共有されているかどうかがわかります。システムファイルやメジャーなアプリケーションのファイルは多数のマシンで共有されているはずですが,あまり重要でない大きなファイルでもいろんなマシンで共有されている可能性があります。

たとえばNode.jsでプログラム開発をする場合,node_modulesというフォルダの下にたくさんのライブラリがダウンロードされますが,このようなファイルはバックアップをする必要はありません。

ブラウザでWebからデータをダウンロードするとき,大きなアプリケーションのプログラムファイルも重要なファイルも同じフォルダに入ってしまい,広く配られているファイルと重要なファイルを区別することは困難ですが,HashiInfoを利用するとその違いが明白になるので,どのファイルが重要なのかがわかるようになります。

一方,コンパイル結果やログファイルなどは重要ではないにもかかわらず,他人が同じファイルを持っている可能性は低いと思われます。

「他人と共有していない」⁠自動生成されるファイルではない」といった条件を満たすファイルは重要である可能性が高いので,こういう性質をもつファイルだけをバックアップすることにしておけば,無駄なバックアップを防ぐことができるでしょう。

ファイルの存在証明

特許や論文になるかもしれない新しいアイデアを思いついたときなど,ある時点においてある情報を自分が持っていたことを証明したい場合があります。

情報がいつ作成されたかを個人的に覚えておくためにはファイル作成時刻を記録しておけば良いのですが,ファイルの中身や作成時刻は後から偽造できるので,確かにその時点でその情報が存在したということを他人に納得させることはできません。デジタル情報がいつ作成されたか証明するためには,信用できる外部の誰かに認証してもらう必要があります。

ある時点である書類が存在したことを証明するためには昔から公証役場が利用されています。公証役場の業務の1つに「確定日付の付与」というものがあります。これは,私文書に「確定日付」を付与し,その日付にその文書が存在したことを証明するものです。

デジタルデータを印刷して書類にしておけば,その存在を証明するために公証役場を利用できますが,情報を印刷して公証役場に持って行くのは面倒ですし費用もかかります。

最近はデジタル情報の存在を証明するために電子公証システムを利用できるようになったので,公証役場に行かなくても公的な認証を得られるようになりました。これは朗報なのですが,かなりの費用がかかるのが難点です。

ある時刻にあるデジタルデータが存在したことを証明する技術のことをデジタルタイムスタンプ技術と言います。電子公証システム利用は高価であり利便性の問題もあるので,Seikoアマノのような会社がデジタルタイムスタンプ技術を提供するサービスを提供しています。

しかし,大事なデータを民間企業に渡すのは心配ですし,サービスがどれほど信頼できるかわかりません。実際,現在運営を中止してしまったサービスもありますし,10年後/20年後も確実に利用できる保証はありません。

電子公証システムや民間の証明システムを利用する場合は証明したいデータの提示が必要ですが,情報が漏れることは心配かもしれません。その時点でその情報が存在することは証明したいけれども情報の中身は公開したくないかもしれません。簡単で良いアイデアを思いついたときなど,特許をとるまで内容は誰にも公開したくないでしょうが,そのアイデアを自分が思いついた日時については記録しておきたいでしょう。

つまり「情報を持っていることは証明するが,情報そのものは公開しない」方法が必要になります。

HashInfoによるデジタルタイムスタンプ

生のデジタル情報の存在証明を行う代わりに,その情報のハッシュ値の存在証明を行うことにすれば,情報そのものを渡す必要がないのでより安全だと考えられます。

たとえばある問題の解法を発見したとき,たとえば「問題AはBという方法で解決できる」といった文字列のハッシュ値を公証役場や電子公証サービスに登録しておけば,ハッシュ値からもとの文字列を計算することはほぼ不可能なので,文字列そのものを登録しなくても証明を行うことができます。

電子公証サービスや民間のデジタルタイムスタンプサービスを利用しなくても,一般的なブックマークサービスやブログサービスを利用することによって無料でハッシュ情報の存在を証明できるかもしれません。

たとえば秘密情報のハッシュ値がABCDEFという値になるとき,http://example.com/ABCDEFというURLをはてブのようなブックマーク登録サイトや任意のブログサービスに記録しておけば,ABCDEFという情報がどの時点で存在していたかがそれらのサイトで公開されることになりますから,Aという問題を解くための情報が,ある時点で存在したことが証明されることになります。

1つのサービスだけに登録すると,そのサイトの管理者に偽造される可能性もあるでしょうが,関連のないたくさんのサービスに同じ情報を登録しておけば,すべてを偽造することは不可能と考えられるので,その情報がその時間に存在したことをかなり確実に主張できると思われます。

つまり,時刻を証明したい情報があるときは必ず次の手順をとることにしておけば,確実にデータの存在証明を行うことができるでしょう。

  • 情報を秘密の場所に格納する
  • 情報のハッシュ値を複数のサイトに登録する

普通のテキストエディタを使っている場合でも,気合いを入れてセーブした場合には上記の処理を自動的に行うようにしておけばいいかもしれません。秘密にしておくべき元データを安全な場所に格納しておけば良いでしょうし,暗号化したデータをクラウドなどにもセーブしておけばさらに安全かもしれません。

HashInfo.net

今回はHashInfoを利用する3種類のアプリケーションを紹介しましたが,多数の人間でファイルのハッシュ値を共有するデータベースがあればさまざまな用途に利用できることが期待できるので,誰もがHashInfoを活用できるようにするためのHashInfo.netというサイトを運用したいと考えています。

一方,こういうサービスではプライバシーの問題に気を付ける必要があります。素性が怪しいファイルを他の誰かが持っていることがわかれば問題になる可能性もありますし,⁠名寄せ」的に個人が特定される可能性があるので,誰がどのハッシュを持っているかという情報は十分に注意して扱う必要があるでしょう。しかし,プライバシーやセキュリティに十分配慮すればHashInfoが有用な機会は多いはずです。

Googleは,ファイルの中身よりもファイル間のリンクを重視することで検索精度を向上させることに成功しましたが,ファイルの中身よりもファイルの重複を重視することによって大きな効果を得られる可能性もあるでしょう。HashInfo.netの運用などによって有益なシステムを構築できればと考えています。

Software Design

本誌最新号をチェック!
Software Design 2019年8月号

2019年7月18日発売
B5判/192ページ
定価(本体1,220円+税)

  • 第1特集
    AWSを基準に考える
    クラウドネイティブのためのLinux入門
  • 第2特集
    ゲームを題材に学ぶ
    内部構造から理解するMySQL
  • 特別企画
    すずきひろのぶのセキュリティ事件観測レポート
    Webシステムのパスワード管理の基本をもう一度
  • 特別企画
    クラウドへのルータ接続実践ノウハウ
    【3】AWSとオンプレミスをつなごう

著者プロフィール

増井俊之(ますいとしゆき)

1959年生まれ。慶應義塾大学環境情報学部教授。ユーザーインターフェースの研究者。東京大学大学院を修了後,富士通半導体事業部に入社。以後,シャープ,米カーネギーメロン大学,ソニーコンピュータサイエンス研究所,産業技術総合研究所,Appleなどで働く。2009年より現職。携帯電話に搭載される日本語予測変換システム『POBox』や,iPhoneの日本語入力システムの開発者として知られる。近著に『スマホに満足してますか? ユーザインターフェースの心理学』。