暗号技術入門02 歴史上の暗号~他人が読めない文章を作る~

担当:安西

この章で学ぶこと

  • シザー暗号
  • 単一換字暗号
  • エニグマ

シザー暗号

シザー暗号とは?

「ずらす」:例 アルファベット3文字ずらす


※ 出典:シーザー暗号(検索日:2017/03/31)

https://commons.wikimedia.org/wiki/File:Caesar_cipher_left_shift_of_3.svg?uselang=ja

S P I R I T E K
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
V S L U L W H N
ずらす文字数が「鍵」に相当

シザー暗号の復号化

「鍵」を共有していれば逆にずらして解読できる。

ブールート・フォース・アタックによる解読


単一換字暗号

アルファベットを別のアルファベットへ変換する暗号

換字表

単一換字暗号の複合化

換字表が単一換字暗号の「鍵」

単一換字暗号の暗号化

S P I R I T E K
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
L J G Z J Q X S

単一換字暗号の鍵空間

26×25×24×23・・・・・×1=
    403291461126605635584000000

403291461126605635584000000 通りの「鍵」がある

単一換字暗号はブルート・フォース・アタックで解読することは困難

しかし「頻度分析」と呼ばれる暗号解読法を使えば解読可能!

頻度分析」とは文字の出てくる頻度を分析して解読する方法

エニグマ

第二次世界大戦中にドイツで使われていた暗号化・複合化を
行う機械


※ 出典:エニグマ (暗号機)(検索日:2017/03/31)
https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%8B%E3%82%B0%E3%83%9E_(%E6%9A%97%E5%8F%B7%E6%A9%9F)

エニグマによる暗号通信

国防軍鍵表による「日替わり鍵」

エニグマを使った暗号通信の流れ

メッセージ例

エニグマを使った暗号通信の流れ(送信者1)


※ 出典:エニグマ (暗号機)(検索日:2017/03/31)

https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Enigma_rotor_exploded_view.png

エニグマを使った暗号通信の流れ(送信者2)


※ 出典:エニグマ (暗号機)(検索日:2017/03/31)

https://commons.wikimedia.org/wiki/File:Enigma_rotor_set.png?uselang=ja

エニグマを使った暗号通信の流れ(送信者3)

エニグマを使った暗号通信の流れ(送信者4)

エニグマを使った暗号通信の流れ(送信者5)

エニグマの複合化(受信者1)

※ 出典:エニグマ (暗号機)(検索日:2017/03/31)

https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Enigma_rotor_exploded_view.png

エニグマの複合化(受信者2)

エニグマの複合化(受信者3)


※ 出典:エニグマ (暗号機)(検索日:2017/03/31)

https://commons.wikimedia.org/wiki/File:Enigma_rotor_set.png?uselang=ja

エニグマの複合化(受信者4)

エニグマの弱点

通信鍵(3文字)を2回繰り返して暗号化するのは解読されやすい。

エニグマの弱点(詳しくは5回鍵配送問題へ)

国防軍鍵表を配送しなければならない。

エニグマの解読

1940年にはエニグマを解読する機械が登場

まとめ

暗号 アルゴリズム
シザー暗号 「指定した文字数」 「ずらす文字数」
単一換字暗号 「換字表」で文字を交換 「換字表」
エニグマ 「エニグマの機械」で文字を交換 「ローターの取り付け角度」

「暗号アルゴニズム」と「鍵」を分けて考える


現代との共通問題「繰り返し使いたいが、繰り返すと危険である」という困難な状況をクリアしようとしていること

参考書籍

結城浩(2015)『暗号技術入門 第3版 秘密の国のアリス』SB Creative 446pp.
ISBN978-4-7973-8222-8
第2章 歴史上の暗号(p22-p45)

画像出典のまとめ

出典:シーザー暗号(検索日:2017/03/31)
https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7

画像の出典:エニグマ (暗号機)(検索日:2017/03/31)
https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%8B%E3%82%B0%E3%83%9E_(%E6%9A%97%E5%8F%B7%E6%A9%9F)

カテゴリー: 勉強会 | タグ: , | 暗号技術入門02 歴史上の暗号~他人が読めない文章を作る~ はコメントを受け付けていません

暗号技術入門01 みんなの暗号化技術入門~What’s暗号化技術の巻~

担当:小比類巻

目次

  • 暗号ってなあに? – 身近にある暗号化
  • 対称暗号と公開鍵暗号 – 暗号化と復号化アルゴリズム
  • 公開鍵暗号
  • ハイブリッド暗号システム
  • その他の暗号技術

暗号ってなあに? – 身近にある暗号化

キーワード

  • 平文(plaintext)
  • 暗号文(ciphertext)
  • 暗号化(encrypt)
  • 復号化(decrypt)
  • 暗号解読 or 解読 or 暗号解析(cryptanalysis)
  • 暗号解読者(cryptanalyst)

暗号化とは様々な場面で使われますが、みなさんにとって一番イメージしやすいのは「メール」の暗号化です。

暗号化したメールは鍵をつかって、復号化しないと見られません。

もし、あなたのメールをメール送信中に奪う不届きな輩が居ても、鍵さえ奪われるもしくは破られるなどしなければあなたのメールは誰にも読むことは出来ません。

例)メールの暗号化

※1 引用:かわいいフリー素材集いらすとや(検索日:2016/12/22)
http://www.irasutoya.com/

身近にある暗号化

  • メールを盗み見されないように使う。
  • 盗み見されないように暗号化します。
  • 暗号化した文章は復号化しないと見られません。
  • つまり、暗号文を盗まれても鍵がない限りは元の文章はわからないのです。

対称暗号と公開鍵暗号 – 暗号化と復号化アルゴリズム

複雑な問題を解くための手順:アルゴリズム

平文 → 暗号文 = 暗号化のアルゴリズム
暗号文 → 平文 = 復号化のアルゴリズム
暗号化のアルゴリズム + 復号化のアルゴリズム = 暗号アルゴリズム

詳しくは3回、11回へ

キーワード

  • アルゴリズム(argorithm)

鍵とは

暗号技術において、鍵(かぎ、key)とは、暗号アルゴリズムの手順を制御するためのデータである。

※2 出典:鍵 (暗号)(検索日:2017/03/28)
https://ja.wikipedia.org/wiki/%E9%8D%B5_(%E6%9A%97%E5%8F%B7)

  • 暗号化の際にも、復号化の際にも鍵は必要。
  • 暗号アルゴリズムの鍵は非常に大きな数である。
  • 当たり前ですが、鍵が盗まれると暗号が破られます。

対称暗号と公開鍵暗号

暗号は鍵の使い方によって二種類ある。

暗号 説明
対称暗号 同じ鍵で暗号化と復号化を行う
公開鍵暗号(非対称暗号) 違う鍵で暗号化と復号化を行う

この二つの暗号のメリットを組み合わせた暗号方式をハイブリッド暗号システム(hybrid cryptosystem)という。(詳しくは6回へ)

公開鍵暗号

公開鍵暗号は1970年代に発明されて、暗号の世界に一台変革を生み出した方式!

現在のコンピュータやインターネットにおけるセキュリティは公開鍵暗号に大きく依存している。

詳しくは5回へ

その他の暗号技術

暗号技術が提供するのは暗号による気密性だけではありません。

以下の二つも提供する。

用語 説明
正真性 書き換えが行われていないことを確かめること
認証(authentication) 本人であることを確かめる

正真性確認(一方向ハッシュ関数)

ハッシュ値とは

ハッシュ関数 (ハッシュかんすう、hash function) あるいは要約関数とは、あるデータが与えられた場合にそのデータを代表する数値を得る操作、または、その様な数値を得るための関数のこと。ハッシュ関数から得られた数値のことを要約値やハッシュ値または単にハッシュという。

※3 出典:ハッシュ関数(検索日:2017/03/28)
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

一方向関数とは

一方向性関数(いちほうこうせいかんすう、英: one-way function)とは、簡単に計算できるが逆関数の計算は非常に困難である関数を指す。暗号理論などで用いられる概念である。素因数分解問題の困難性を用いたものが代表的。

※4 出典:一方向関数(検索日:2017/03/28)
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

上二つを合わせて 一方向ハッシュ関数 という。

任意ビット長のビット列を、
ある長さ(nとする)のビット列に変換する関数 h(x) で、
h(x1)=h(x1) を満たす x1, x2 を容易に見い出せないのもの

正真性確認について

データが改竄されていないかを確認するために、一方向ハッシュ関数が使われます。

「正真性 = そのデータが正真正銘本物であるかどうかの確認」

通信回線を通じてデータを送受信する際に、経路の両端でデータのハッシュ値(一方向ハッシュ関数)を求めて両者を比較すれば、データが通信途中で改ざんされていないか調べることができる。

ネット上で配布されるソフトウェアを配布する際などにソフトウェアとその正真性を証明するために一緒に作者がそのプログラムのハッシュ値を公開することがあります。

Webサイトなどで配布されているファイルは、ダウンロード時に破損したり、悪意のある攻撃者によって改ざんされていたりすることがある。

ファイルの「ハッシュ値」を計算・比較できるようにしておくと、こうしたトラブルを防止しやすくなる。

まとめると

用語 説明
ハッシュ値 正真性(データが改ざんされていないか)を検証するためのもの
一方向ハッシュ関数 正真性を提供する暗号技術

通信回線でデータを送受信するとき

経路の両端でデータのハッシュ値を求めて両者を比較すれば、データが通信途中で改ざんされていないか調べることができる。

一方向関数による生成であるため、
ハッシュ値を変更しないまま元データを改ざんすることはできない。

認証と完全性検査に用いられる。

正真性(integrity) = 完全性

メッセージ認証コード(message authentication code)

メッセージが期待した通信相手から来たものであることを確かめるための技術

詳しくは8回へ

  • 正真性
  • 認証

を確認できる.

デジタル署名

  • なりすまし、改竄、否認という脅威を防ぐ技術。
  • 現実世界の署名や押印をデジタルの世界に持ち込んだもの。
  • なりすましや改竄を見つけ出して、否認を防止。

詳しくは9回へ

擬似乱数生成器

  • 乱数列を擬似的に生成するアルゴリズム
  • SSL/TLSの通信を行う時にその場限りの鍵(セッション鍵)が生成
  • 通信の気密性の保証

詳しくは12回へ

暗号用語

用語 説明
ステガノグラフィ(steganography) メッセージの存在を隠してしまうような技法
電子透かし ファイルの中に著作権者や購入者の情報を埋め込む技術

暗号セキュリティの常識

  • 秘密の暗号アルゴリズムを使うな
  • 弱い暗号は暗号化しないよりも危険
  • どんな暗号もいつかは解読される

秘密の暗号アルゴリズムを使うな

「自分の会社で独自のアルゴリズムを開発し、それを秘密にしておけば安全だ」

という考えは大きな誤り

「秘密のアルゴリズムを作る/使う」のではなく!

「公開されて、強いとされる暗号アルゴリズム」を使うべき!

暗号アルゴリズムそのもの を秘密にして機密性を保とうとしている暗号システムは暗号アルゴリズムの詳細が暴かれてしまったら終わり…

強い暗号アルゴリズムを生み出すことは非常に困難

専門の暗号解読者によって暴かれやすい!

弱い暗号は暗号化しないよりも危険

「暗号」を使うことで「誤った安心感」を抱き、
機密性の扱いがぞんざいになってしまうことが危険。

どんな暗号もいつかは解読される

解読されない暗号アルゴリズムは存在しない。

参考書籍

結城浩(2015)『暗号技術入門 第3版 秘密の国のアリス』SB Creative 446pp.
ISBN978-4-7973-8222-8
第1章 暗号の世界ひとめぐり(p4-p19)

カテゴリー: 勉強会 | タグ: , | 暗号技術入門01 みんなの暗号化技術入門~What’s暗号化技術の巻~ はコメントを受け付けていません

2013/01/08のNow Up to Date

2013年がやってまいりました。
スピリテックも社員、サポーターズの皆様、それからお客様、様々な方に支えられ、無事に年を越すことが出来ました。

去年の4月に入った若いメンバーたちも、めきめき頼もしくなってきました。

もちろん、昭和世代も頑張っております。

これからも、もっと新しいこと、もっと面白いこと、もっと先を目指して参ります。日本中の皆様にとって、2013年が良い年になりますように。

 

 

カテゴリー: Now Up to Date | 2013/01/08のNow Up to Date はコメントを受け付けていません

Android/EditTextでIMEの未確定文字列が確定された瞬間

長いことご無沙汰でした。

今回は地図アプリの話題から離れて、最近のアプリ製作の中でハマったというか難問だった問題について説明したいと思います。
続きを読む

カテゴリー: プログラミング | タグ: , , | Android/EditTextでIMEの未確定文字列が確定された瞬間 はコメントを受け付けていません

2012/4/2のNow Up to Date

またしても、気づけばあっという間に4月です。
新宿御苑の桜が楽しみな季節になりました。
例年、年明け~3月いっぱいは忙しい時期ですが、今年はとくに去年の強い反動を感じたように思われます。

さて、スピリテックに、フレッシュな新人がやってきました。
どんな風を起こしてくれるのか、とてもワクワクしています。
就職は、企業にとっても社員にとっても、ご縁があってのことと思います。
このご縁を大事に、みんなで会社を育てていけるよう、頑張っていきます。

カテゴリー: プログラミング | 2012/4/2のNow Up to Date はコメントを受け付けていません

2012/1/5のNow Up to Date

あけましておめでとうございます。
今年も無事に年明けを迎えることが出来ました。
スピリテックは今日から仕事始めです。
早いもので、新宿御苑に移ってから今月で一年です。たった一年しか経ってないのか!という気もします。
去年は本当に忘れられない年でした。
今年は、スピリテックにとって、スピリテックの周りの方々にとって、日本に住む方々にとって、そして世界中で、いい年になりますように。

カテゴリー: Now Up to Date | 2012/1/5のNow Up to Date はコメントを受け付けていません

デバイスサイズによるcss切替の効率化

こんにちは。デザイナー兼コーダーのよこです
入社半年目にして初のブログ投稿です

今回のネタは複数デバイス対応のためのcss記述の入門編です
PC,iPhone,Android,各種タブレット端末など,Webサイトの閲覧環境は多様化しています。

Webサイト・アプリをhtml/cssベースで構築する際は,常に同じ画面を見せておくだけでは済まされないことが増えていることと思います。
このためデバイスサイズによって異なるcssを切り替える手法が各方面で紹介されています。

と言ってもデバイスサイズごとにcssを用意する場合,htmlの<head>要素内に<link>要素がズラリと並ぶと、ソースは重くなり更新もページごとに行う必要があり非効率です。

これを解消するために,import.css内にてデバイスサイズによるスタイル切り替えを全て一括して行う方法をご紹介します。
まずは下記のデモソースをDLしてご覧下さい。

demo_20111213.zip

ファイルを解凍したらトップ階層のindex.htmlをブラウザで開いて、ウインドウの横幅を変えてみてください。

ウインドウサイズに応じて背景画像が変わるのがわかると思います。

この原理を使って、背景色以外のプロパティでも画面サイズに応じて異なるスタイル指定を行い、各画面サイズごとに最適化したスタイルを適用させることができます。

以下、デモのソースをご覧いただきながらお読みください。

ポイント

1.css読み込みのためにhtmlに記述するのは import.cssの1行のみ
まずは下記のソースをhtmlの<head>要素内部に記述

<link rel=”stylesheet” type=”text/css” media=”all” href=”css/import.css”>

※最後のhref属性は必要に応じてimport.cssへの任意のパスに書き直してください。

2.import.css内にデバイスサイズごとのcss切替を記述

Internet explore 9 , firefox , Safari , Opera , Google Chromeでは,css内部からのimport規則についてメディア指定の一環でサイズ指定をできます。

import.cssのソースは下記の通りです。

————————————————————–

1.@charset “utf-8”;
2.@import url(“base.css”);

3-1.@import “pc.css” only screen and (min-width:1024px);
3-2.@import “pad.css” only screen and (min-width:768px) and (max-width:1023px);
3-3.@import “smart_l.css” only screen and (min-width:480px) and (max-width:767px);
3-4.@import “smart_s.css” only screen and (max-width:479px);

4-1.@media only screen and (min-width:1024px) {#wrapper{width:1024px;}}
4-2.@media only screen and (min-width:768px) and (max-width:1023px) {#wrapper{width:768px;}}
4-3.@media only screen and (min-width:480px) and (max-width:767px) {#wrapper{width:480px;}}
4-4.@media only screen and (max-width:479px) {#wrapper{width:320px;}}

※行の最初の通し番号はこの記事を読みやすくする目印です。css上では消去して下さい。

————————————————————–

解説
1.文字コードの宣言
2.全てのデバイスサイズで適用させるcss読み込み

3-1~3-4 デバイスサイズによって異なるcssを読ませる記述
たとえば3-3行は 「画面サイズが480px以上767px以下だった場合にsmart_l.css を読み込む」の意味です。

4-1~4-4
スタイル直接記述でも画面サイズによる指定が可能です。
たとえば4-2は「画面サイズが768px以上1023px以下の場合に,#wrapper の横幅を768pxにする」の意味です

4-1~4-4の記述プロパティ内容を3-1~3-4で参照させているcssに記述しても同じ動きをしますが,このimport.cssに記述しておくことで,サイト(またはアプリ)全体の画面サイズの基本前提をimport.css内だけで管理できるという利点があります。

※IEのバージョン8以下にも対応したい場合,PC向けcssを読み込ませるために下記を追記

<!–[if IE]>
<link rel=”stylesheet” href=”css/pc.css” type=”text/css” />
<style>#wrapper{width:1024px;}</style>
<![endif]–>

→IEを使っているという時点でスマートフォンではないと考えられるのでPC向けスタイルを適用させれば最低限の動作は保証されると思います。

 

3.画面拡大を指定

各デバイスでのbody / wrapperサイズを振り分けて,それぞれのデバイスで最適な表示を実現できたらもう画面の拡大・縮小は不要なので,ピッチ固定をするために,下記を記述します。

<meta name=”viewport” content=”initial-scale=1.0, width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no”>

 

(まとめ)

サンプルのソース(demo_20111213.zip)

今回紹介した方法であれば仮に対応するデバイスが増えて本番サーバーに適用する際に、cssだけを更新すればOKにできるという利点があります。
スタイル変更はプログラムとは分断して完全にcssの変更のみで済むようにしていきたいですね。

カテゴリー: プログラミング | デバイスサイズによるcss切替の効率化 はコメントを受け付けていません

放置されないTODO

実験的な機能だとか、まずは動作することを最優先にした作業では品質よりもスピードが求められます。そこで後ろめたさを感じながら場当たり的なコードを書いて「あとで直そう…」と心に誓うのですが、そのまま放ったらかしにしてしまうことってありませんか?
続きを読む

カテゴリー: プログラミング | タグ: , | 放置されないTODO はコメントを受け付けていません

iOS 5のUIWebView

iOS 5がリリースされましたね。新機能が魅力的な一方で、既存のアプリにトラブルが出て苦労している方もいるようです。そんなトラブルの一つをご紹介します。
続きを読む

カテゴリー: プログラミング | タグ: , , | iOS 5のUIWebView はコメントを受け付けていません

NSZombieEnabled

メモリリークを修正したと思ったら、今度はEXC_BAD_ACCESSに悩まされた経験はありませんか? そんなときに役立つNSZombieEnabled機能がXcode4では簡単に設定できるようになっていました。
続きを読む

カテゴリー: プログラミング | タグ: , | NSZombieEnabled はコメントを受け付けていません