Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
暗号について
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Seiya
July 18, 2021
Technology
180
0
Share
暗号について
大学サークルのイントロ用資料です
暗号とハッシュについての説明資料です
Seiya
July 18, 2021
More Decks by Seiya
See All by Seiya
ATProtocol ざっくり概要把握してみた @ DWeb Tokyo Meetup #2
silmin_
0
42
おうちGitLabのススメ
silmin_
3
1.7k
Git入門
silmin_
32
22k
LinuxCommand入門
silmin_
0
390
LinuxCommand入門2
silmin_
0
280
Webについて
silmin_
3
200
ネットワークとは
silmin_
0
260
コンピュータとは|初心者向け資料
silmin_
1
200
ビットについて|入門者向け資料
silmin_
0
220
Other Decks in Technology
See All in Technology
AI バイブコーティングでキーボード不要?!
samakada
0
650
色を視る
yuzneri
0
250
AIでAIをテストする - 音声AIエージェントの品質保証戦略
morix1500
1
150
Percolatorを廃止し、マルチ検索サービスへ刷新した話 / Search Engineering Tech Talk 2026 Spring
visional_engineering_and_design
0
180
Pure Intonation on Browser: Building a Sequencer with Ruby
nagachika
0
270
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
5
1.9k
AgentCore×VPCでの設計パターンn選と勘所
har1101
4
340
Modernizing Your HCL Connections Experience: Visual Report to chain, Profile Enhancements, and AI Integration
wannesrams
0
130
コミュニティ・勉強会を作るのは目的じゃない
ohmori_yusuke
0
270
UIライブラリに依存しすぎないReact Native設計を目指して
grandbig
0
160
AI時代における技術的負債への取り組み
codenote
1
1.9k
AndroidアプリとCopilot Studioの統合
nakasho
0
180
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
290
Become a Pro
speakerdeck
PRO
31
5.9k
How to Talk to Developers About Accessibility
jct
2
180
Prompt Engineering for Job Search
mfonobong
0
280
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
Faster Mobile Websites
deanohume
310
31k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Are puppies a ranking factor?
jonoalderson
1
3.3k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Marketing to machines
jonoalderson
1
5.2k
Facilitating Awesome Meetings
lara
57
6.8k
Transcript
暗号について SecPrj Intro-phase
暗号とは 暗号とは、ある情報を特定の決まった人しか読めないように一定の手順に 基づいて無意味な文字や符号の列に置き換えたもの。情報の伝送や記録、 保存の際、第三者に盗み見られたり改竄されないようにするために作成される。 暗号(cryptograph)とは - IT用語辞典 e-Words https://e-words.jp/w/%E6%9A%97%E5%8F%B7.html
平文と暗号 平文 暗号文 暗号化
平文と暗号 平文 暗号文 暗号化 暗号 アルゴリズム
平文と暗号 平文 暗号文 暗号化 暗号 アルゴリズム 暗号鍵
平文と暗号 平文 暗号文 暗号化 暗号 アルゴリズム 暗号鍵 暗号化アルゴリズムと暗号鍵によって暗号化する
暗号化と復号 暗号文 平文 復号 復号 アルゴリズム 暗号鍵
暗号化と復号 暗号文 平文 復号 復号 アルゴリズム 暗号鍵 正当な手段で平文化することを復号という
平文通信
平文通信 盗聴
暗号通信 暗号鍵
暗号通信 暗号鍵 暗号化
暗号通信 暗号鍵 暗号化 復号
暗号通信 暗号化 復号 盗聴
鍵交換問題 それぞれのマシンで暗号化/復号するなら,鍵を共有しておく必要がある でも鍵を共有するタイミングで鍵ごと盗聴されたら終わり 暗号化と復号に同一の鍵を使う以上,鍵交換問題からは避けられない 暗号化と復号に同一の鍵を使わなければいいのでは?
暗号鍵と復号鍵を分離する 1ユーザごとに鍵を2つもつ 自分に送ってもらう際に,自分の暗号鍵を使って暗号化してもらう それを自分が持ってる復号鍵で復号する 暗号鍵 復号鍵 公開する 公開しない Data
暗号鍵と復号鍵を分離する 1ユーザごとに鍵を2つもつ 自分に送ってもらう際に,自分の暗号鍵を使って暗号化してもらう それを自分が持ってる復号鍵で復号する 暗号鍵 復号鍵 公開する 公開しない Data
暗号鍵と復号鍵を分離する 1ユーザごとに鍵を2つもつ 自分に送ってもらう際に,自分の暗号鍵を使って暗号化してもらう それを自分が持ってる復号鍵で復号する 暗号鍵 復号鍵 公開する 公開しない Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 公開鍵 公開鍵 秘密鍵 秘密鍵 A B
AからBへの送信を想定 Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 暗号鍵A
暗号鍵B A B Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 暗号鍵A
暗号鍵B A B Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 A
B Data 暗号鍵B 1.送るデータをBの公開鍵で暗号化 暗号鍵A
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 A
B 暗号鍵B 1.送るデータをBの公開鍵で暗号化 暗号鍵A Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 A
B 暗号鍵B 1.送るデータをBの公開鍵で暗号化 暗号鍵A 2.暗号化したデータを送信 Data Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 A
B 暗号鍵B 1.送るデータをBの公開鍵で暗号化 暗号鍵A 2.暗号化したデータを送信 Data Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 A
B 暗号鍵B 1.送るデータをBの公開鍵で暗号化 暗号鍵A 2.暗号化したデータを送信 Data 3.受け取ったデータをBの秘密鍵で復号 Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 A
B 暗号鍵B 1.送るデータをBの公開鍵で暗号化 暗号鍵A 2.暗号化したデータを送信 3.受け取ったデータをBの秘密鍵で復号 Data Data
暗号鍵A 復号鍵A 暗号鍵B 復号鍵B 0.事前に公開鍵を交換 公開鍵 公開鍵 秘密鍵 秘密鍵 A
B 暗号鍵B 1.送るデータをBの公開鍵で暗号化 暗号鍵A 2.暗号化したデータを送信 3.受け取ったデータをBの秘密鍵で復号 Data Data 無事,B側でデータをみることができた どこで盗聴されても元の平文が漏れる心配はない 公開鍵暗号方式と呼ばれる方式
暗号アルゴリズムについて - Caesar暗号(シーザー暗号/カエサル暗号)(換字式暗号) - アルファベットを任意の数ずらして暗号化する - Caesar暗号は単換字式暗号 - AES暗号 -
128/192/256bitの鍵をもつブロック暗号アルゴリズム - RSA暗号 - 大きな2つの素数の素因数分解が困難なことを利用した暗号アルゴリズム - ECC(楕円曲線暗号) - 離散対数問題と素因数分解などの数学において難解な問題を利用した暗号アルゴリズム - など
Caesar暗号 平文文字列をアルファベット順に任意の数ずらして暗号化する o r a n g e r u
d p j h orange rudpjh +3 p q s t b c l o f g h i
Caesar暗号 平文文字列をアルファベット順に任意の数ずらして暗号化する o r a n g e r u
d p j h orange rudpjh +3 復号するにはCaesar暗号を使っているという事実と, いくつずらすかを特定する必要がある この暗号で13文字ずらすものをROT13という(Rotate by 13)
ハッシュ値(Hash value) ハッシュ値とは、元になるデータから一定の計算手順により求められた固定長 の値。その性質から暗号や認証、データ構造などに応用されている。 ハッシュ値を求めるための計算手順のことをハッシュ関数、要約関数、 メッセージダイジェスト関数などという。 ハッシュ値(ダイジェスト値)とは - IT用語辞典 e-Words
https://e-words.jp/w/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4.html 元になるデータから計算される固定長の値 同じデータからは全く同じハッシュ値が求められる ハッシュ化も広義では暗号化(基本は違う気がする)
ハッシュ関数(SHA256)にかけてみる
平文が少しでも違うと,ハッシュ値は全然違うものになる ハッシュ関数(SHA256)にかけてみる
平文が少しでも違うと,ハッシュ値は全然違うものになる ハッシュ関数(SHA256)にかけてみる -n オプションをつけると改行を末尾に入れない
SHA256の場合,平文の文字数に関係なく65文字の[a-z0-9]に写っている ハッシュ関数(SHA256)にかけてみる
つまりハッシュ値の方が表現の幅が狭い 平文空間 (ほぼ無限) ハッシュ空間 (SHA256) (36^65)
ハッシュの用途 ハッシュは重複しうるが実用上問題ないとされており,実際に使われている (実際には衝突回避や衝突してもいいように実装されている) - 改竄検出 - 平文が少しでも違うとハッシュ値は大きく異なることを利用 - 暗号化 -
適切なハッシュ関数を使えば平文を推測できない - 平文が必要ないデータに適用できる(パスワードなど) - 重複/類似文字列検索 - 文字列を細かく区切ってハッシュ化して,重複部分や類似部分を探す - ハッシュテーブル
まとめ 暗号 実際にやり取りされるものを隠蔽する仕組み 基本的には可逆で,元の平文に戻すことができる ハッシュ 平文の情報を捨てて保存することが可能 情報量を落として効率化したり整合性検査などに使われる