仕組みについて解説しますツイートシェアはてブLINEPocketブロックチェーンや電子マネーなどの経済資本や重要情報がコンピューターで扱われ続けている中、セキュリティの重要性はますます上がってきています。ウェブ開発を行う上でも、クラッカーからの攻撃の被害に合わないようセキュリティを考慮することがとても重要になっているのです。そこで、今回はインターネット通信において最も基本的な通信方法である共通鍵暗号と公開鍵暗号の仕組みについて解説していきます。暗号とはなにかそもそも暗号とはなんでしょうか?暗号とは「ある法則を利用して、特定の人だけが読めるようにすること」ということが出来ます。文章を誰でも読める状態から、特定の人しか読めない状態にすることを「暗号化」といいます。それによって作られた文章や文字列を「暗号文」と言います。逆に、誰でも読める通常の文章を「平文」といいます。暗号化の作業では、「アルゴリズム」と「鍵」が必要になります。「ブログ」という文章の文字を、2文字ずつ上にずらしてみましょう。すると「バルガ」になります。鍵→2文字という対応関係になります。50音表を上にずらすというアルゴリズムと、2文字ずらすという鍵を両方知らなければ、暗号文の意味は分かりません。アルゴリズムと鍵を使って、元の読める文章に戻すことを「復号」と言います。「復号化」ではないので要注意です。現在、通信などで使われている暗号は、アルゴリズムは公開して鍵を秘密にしておくことで機密性を維持しています。鍵をどのようにして守るかということが重要になります。仕組み共通鍵暗号は、最もシンプルな暗号方式です。上の図のように、あらかじめ全く同じ鍵を2つ作成して送信者と受信者の両方で持っておきます。上に書いた文字数をずらす暗号化や、第二次世界大戦で利用されたエニグマなど1976年以前の暗号は共通鍵暗号に分類されます。Standard)として広く用いられてきました。Standard)が標準として利用されています。AESでは鍵の長さを128ビット、192ビット、256ビットから選択できます。共通鍵暗号のメリット・デメリット共通鍵暗号のメリットは、暗号化と復号の計算が早いという点です。仕組み公開暗号鍵では、まず受信者側が「秘密鍵」と「公開鍵」を作成します。「秘密鍵」は絶対に漏洩しないように受信者が持っておきます。公開鍵暗号は1977年にリベスト・シャミア・エーデルマンが考案したRSA暗号が代表例です。RSA暗号は大きな数の素因数分解が簡単に出来ないことを前提として作られており、量子コンピューターなど桁違いの計算機能を持つコンピュータが実用化されると、突破されるのではないかと心配されています。その他には、RSA暗号と比べて短い鍵の長さで同等の暗号強度を保てる楕円曲線暗号などが存在します。公開鍵暗号のメリット・デメリット公開鍵暗号では、共通鍵暗号のように鍵を慎重に受け渡す必要がありません。公開鍵を公開できるので、鍵の管理も簡単になります。一方で、暗号化や復号の処理計算に時間がかかるというデメリットがあります。共通鍵暗号では鍵の受け渡しと鍵の管理、公開鍵暗号では暗号化と復号に処理時間がかかるというデメリットがありました。それならば、両者のいいところを混ぜ合わせてデメリットを打ち消してしまおうというのがハイブリッド暗号です。手順1受信者は秘密鍵と公開鍵を作成し送信者に送信2送信者はセッションキーと呼ばれる共通鍵を作成3共通鍵で平文を暗号化4共通鍵自体を公開鍵で暗号化5暗号文と暗号鍵を受信者に送信6受信者は秘密鍵を使って暗号鍵を復号し共通鍵を取得7復号で手に入れた共通鍵で暗号文を復号して平文を取得ハイブリッド暗号のメリット・デメリットハイブリッド暗号は、共通鍵暗号と公開鍵暗号のメリットを取り入れて、デメリットを打ち消したものとなります。そのため、鍵の受け渡しや管理が簡単で、計算時間も遅くならないという点で最も使われている暗号方式になります。まとめ暗号の仕組みは最初は複雑で訳が分かりませんでしたが、何度か勉強しているうちに「そういうことだったのか!」と理解できるようになるかと思います。これらの暗号方式は、SSL/TLSや署名・証明書といったウェブにおけるセキュリティ技術につながっていくので、ここでしっかりと理解をしておくことが重要です。Currency(暗号通貨)」と言われているように暗号技術が重要なコンセプトになっています。この記事を読んで、少しでも理解を深めていただけたら幸いです。改定)Programmingこの記事が気に入ったらいいねしよう!最新記事をお届けします。ツイートシェアはてブLINEPocketfeedly【セキュリティ】メッセージ認証コード・デジタル署名の仕組みについて解説します【コラム】リベラルアーツはなぜ重要か?RECOMMENDこちらの記事も人気です。Science2019.7.4【Python】for文の進捗状況をプログレスバーで可視化する方法(tq...Programming2019.8.6【jQuery】DataTablesの簡単な使い方と注意点を紹介Programming2019.11.26【PHP】array_filterを使ってスマートに配列を抽出する方法Programming2019.9.19【jQuery】CakePHPでAjaxを実装する方法ケイタのプロフィール元バックパッカー/ウェブエンジニア/機械学習エンジニア/写真アーティスト(事業企画を1年、その後エンジニアの仕事を本格的に始めて2年目です)2015年3月に東京工業大学を卒業した後、フリーターをしながらアジア・ヨーロッパへのバックパッカーに挑戦。20ヶ国を訪問し、様々な暮らし方・文化を知る。新規事業のウェブマーケティング・UI/UXデザインを経験。2018年6月にワーホリで渡独し、同年10月に帰国。現在はデータアナリスト・ウェブエンジニア・機械学習エンジニアとして活動中。使用言語はPHP/Python/JavaScriptがメイン。