はてなブックマーク - 公開鍵暗号のちょっとした誤解
    このエントリーをはてなブックマークに追加

    初めまして。Fusicで副社長をしている浜崎です。

    社内全体が「副社長も書けよ」な雰囲気になり、なんとなく書くことになりました。

    納富と同様、とても長いこと技術から離れているので、さて何を書こうかと悩んだわけですが、少しさかのぼって、学生時代の社会インフラに関する研究の一環として取り組んでいた「暗号」について話したいと思います。当時に暗号を専門とする先生から得た知識なのですが、公開鍵暗号に関して、誤解されて広まっている情報についてです。

    公開鍵暗号とは?

    さて本題に入る前に、公開鍵暗号とはなんやねん?ということについて書いておきます。

    そもそも暗号というのは、ある情報を秘匿的にやりとりするための手段なのですが、公開鍵暗号もその手段の1つです。公開鍵暗号は、暗号化のために用いる「公開鍵」と復号化のために用いる「秘密鍵」という異なる別の鍵を用いることで成り立つ暗号方式のことです。これは1976年にデフィーとヘルマンによって発表されました。

    それまで暗号といえば、共通鍵暗号という方式が主流でした。これは、暗号化と復号化に同じ「共通鍵」を用いることで成り立つ暗号方式です。例えばお互い秘匿情報をやりとりする場合は、事前に「共通鍵」を共有しておき、その鍵で暗号化・復号化を行うことで秘匿情報のやりとりを成り立たせています。この概念は一般社会でも広く応用されている考え方で、例えば野球やバレーボールにおけるブロックサインなんかも広義ではその枠組みに入るんではないかと思います。

    ただ、この共通鍵暗号には問題がありました。それは前述した、事前に「共通鍵」を共有しておくことをどうやってするか?という配送問題です。共通鍵が漏れてしまった場合、それで暗号化されたものを第三者が復号化出来てしまうわけですから、当然共通鍵そのものも秘密にやりとりしなければなりません。じゃあまたそれを秘密に通信するために別の鍵を作って、またそれを秘密に・・なんてことをしてても一向に解決はしないわけです。また、例えば100人の人と別個に秘匿通信をする場合、管理すべき共通鍵は100通りとなり、それも煩雑です。

    そのような問題を解決したのが公開鍵暗号です。これは鍵の配送問題や管理の煩雑さを解決する手段としてとても有効なものです。フローは以下の通りです。

    1. 情報の受信者(以下A)は、暗号化用の鍵(公開鍵、以下P)と復号化用の鍵(秘密鍵、以下S)を作成する。

    2. 続いてAは、Pのみを広く公開する。SはA自身が厳重に管理する。

    3. Aに対して秘密の情報を送りたい送信者(以下B)は、公開されているPを用いて、情報を暗号化してAに送信する。

    4. 暗号化された情報を受け取ったAは、Sを用いて復号化する。

    この方法を用いることで、AさんはPを広く公開すればよいだけなので、配送問題がクリアされます。

    この公開鍵暗号には、ElGamal暗号や楕円曲線暗号等いくつかの方式がありますが、最もメジャーな方式は、1977年、つまり公開鍵暗号が発表された翌年に、Rivest、Shamir、Adlemanにより発表されたRSA暗号でしょう。これは素因数分解の困難さを利用したものなのですが、SSL通信等で用いられている方式です。ただこのRSA暗号が、本日の標題である誤解を引き起こしている要因になっているのです。

    公開鍵暗号の誤解

    その誤解は以下のようなものです。

    秘密鍵Sで暗号化したものは公開鍵Pで復号化できる

    これってよくよく考えると暗号化の意味がない(だって誰でも復号できるんで)わけなんですが、この記述がなされたものが多く出回っているのは事実です。例えば日本ベリサインの公開鍵暗号について解説したページでも同様の記載が見受けられます。

    このような誤解を招いた理由は、前述した公開鍵暗号方式の1つであるRSA暗号がそのような性質を持つためなのです。つまり、秘密鍵Sで暗号化したものを公開鍵Pで復号化する対称性の性質を持っているんですね。公開鍵暗号を代表する最もメジャーな方式がそのような性質を持つため、公開鍵暗号自体がそのような性質を持つと勘違いしてしまっているということです。実際に他の方式ではそのような性質を持たないものもありますんで、公開鍵暗号の定義としては問題ありかなと思います。

    とまぁ、つらつら書きましたが、私は暗号の専門外なのでうかつなことが書けないなぁ〜と思いながら最後まで来てしまいました。でも昔学んでいたことをほじくり返してみるのもいいですね。よい機会でした。では、みなさん、よいお年を!

    { 2010.12.29 }

    自然対数の底

      はてなブックマーク - 自然対数の底
      このエントリーをはてなブックマークに追加

      社内全体が「社長も書けよ」的な雰囲気になり、渋々書くことになりました。

      生まれて初めてのブログを書く納富です。初体験です。

      さて、いざ書こうとしたのですが、まず長いこと開発に関わっておらず、本ブログのタイトルである「Developers’」に合致しないわけです。
      社長としての何かを書いても「技術的でない」と怒られるでしょうし。。。

      そこでいろいろと考えた訳ですが、当社では「書籍発表」というものがあり、数ヶ月に一回順番が回ってきます。30分の持ち時間で、何かしらの書籍をみんなの前でプレゼンをする訳ですが、私が少し前に行った確率の話でもしたいと思います。
      当然ながら、プログラマーにとって「確率(Probability)」は非常に重要なスキルです。

      さて、本題

      皆さん、ここで質問です。感覚的に回答してください。

      ある洗濯機を1日に1回使います。この洗濯機、10回に1回の割合で故障します(故障確率:10%)。この洗濯機をあなたが毎日使うとした場合、いつ壊れるだろうと予想しますか?

      なんとなく、10日後くらいに壊れるかな、と考える人は多いのではないでしょうか?
      しかし実際のところを計算してみると、9日後までに故障する確率は、約61%となります。
      計算式は、

      1/10+1/10*9/10+1/10*(9/10)^2+・・・+1/10*(9/10)^8

      それでは、問題を一般化して、

      故障確率1/Nの機械を毎日使い、N日より前に故障する確率は?

      数式は、

      1/N+1/N*(N-1)/N+1/N*{(N-1)/N}^2+・・・+1/N*(N-1/N)^(N-2)

      となります。
      Nを大きくしていくとどうなるかというと、次の値に近づいていきます。
      0.63212 0559 …  (約63.2%)。

      自然対数の底

      この「0.63212 0559 …」ですが、次のように表されます。
      1.71828 18284 59045 23536 …/ 2.71828 18284 59045 23536 …
      この分母の数字、e」で表される自然対数の底です。

      y=e^x において、何度微分してもそのままという、不思議な数字です。

      要は、N日より前に故障する確率は、Nを大きくしていくと、e-1/e に収束します。

      感覚のズレ

      後半の方は、少し脱線しましたが、この確率における感覚的なズレは意外と使えるかもしれません。

      例えば、確率1%で当たるルーレットがあり、ずっと回すと69回目において当選確率が50%を超えます。
      1%というと、まー当たらないだろうと考えがちですが、何度もやっていると思ったよりも早い段階で当たる確率が50%を超えるのです。
      これに似た例でよく言われることとしては、ある組織の人数が23人を超えると、その中に同じ誕生日の人がいる確率は50%を超えます。
      23人というと意外と少ないと感じるのではないでしょうか。

      最後に

      会社で年間購読している雑誌NEWTONから目から鱗な話を。
      100万光年先の星というと、光の速さで100万年かかると思っている方がおられると思います。
      しかし、実際はそうではありません。距離が光速(30万km/秒)の100万年倍というだけであり、もしも光速に近い速度で進むことができるならが、空間の縮みや時間の遅れが発生するので、もっと早く着きます。
      仮に光速の99.999999%の速度で進むことができるなら、100年で約71万光年進むことができます。よって、140年くらいで到着するわけです。
      まー、そんな速度は無理なわけですが。。。
      ~~~~~~~~~~~~~~~~~~~~~~~

      もう2度と書くことはないと思いますが、みなさま、よいお年を。
      年内いっぱい続くようです。

        はてなブックマーク - 意外と使える無料便利ツール
        このエントリーをはてなブックマークに追加

        みなさんこんにちは。マーケティング部の井 (いい)です。
        エンジニアではありませんが、エンジニアブログをなぜか書いちゃってます。
        初投稿なので、まじめにいきます。

        今日は、技術ネタではありません。
        僕が普段業務で使っている、けっこう使える無料「便利ツール」を3つご紹介します。

        ブラウザ上で、PDFファイル の分割・結合ができる『I LOVE PDF』

        「PDFの結合を今すぐしたいんだよね。」 そんな人にオススメなのがこのサービス。
        インストールや、ログインも不要で、今すぐ利用したいときにかなり役立ちます。
        www.ilovepdf.com/

        ●PDFファイルの結合

        結合したいPFDファイルを選んで、「MERGE PDFs!」ボタンを押すだけ。
        画面が切り替わり、今度はダウンロードの画面が開くので、ダウンロードして完了です。

        ●PDFファイルの分割

        同様に、分割したいPFDファイルを選んで、「SPLIT PDF!」ボタンを押すだけ。
        画面が切り替わり、今度はダウンロードの画面が開くので、ダウンロードして完了です。

        急いでいるときなんかは、多機能なものを使うより、目的が絞られてて、
        なおかつログインなしでサクッとできた方が良いですよね。

        PDFにパスワードを付ける『即錠★PDF』

        PDFのくだりをもうひとつ。
        すでにできあがったPDFファイルにパスワードを付けるにはこれ!
        外部宛にPDFの送付を行うことがある方は、重宝するはずです。

        ダウンロードサイトから、圧縮ファイルをダウンロードします。
        解凍すると、フォルダの中には「PDFLock.exe」というファイルがあるので、これを起動します。

        起動すると、↑ のような画面が表示されるので、
        ①PDFフィルを選択
        ②「制限する」と「ユーザ」にチェックを入れる
        ③パスワードを入力
        あとは「作成」ボタンをクリックするだけ。これも簡単ですね。

        デスクトップのアイコンを整理する『Fences(フェンス)』

        デスクトップにアイコンが散らばってごちゃごちゃ…。
        そんな方にオススメなのが無料アプリケーション『Fences(フェンス)』。

        必要なアイコンをデスクトップに、きれいに見やすく配置するツールです。
        好きな場所に枠を作り、その中にアイコンをドラッグ&ドロップすると、
        自動整列してくれます。

        ラベルの表示、フェンスの透明度、輝度、色、彩度の調整、ラベルテキストの色、
        フェンスの枠、スクロールバー表示等の設定が行え、自分好みにカスタマイズできます。

        僕のようにデスクトップにファイルを溜め込みがちな方は、
        一度試してみてはいかがでしょうか。ちなみにMac には対応してないみたいですが…。

        最後に

        エンジニアのみなさん。普段何気なく使っているこのような「便利ツール」。
        知らない方、意外と多いです。
        お客さんに是非紹介してあげてください。けっこう喜ばれますよ。