暗号化を施す際、keyをハードコードすると簡単に複合されてしまいますよね?
では、簡単に複合されないように暗号化するにはどうしたらいいんですか?
(これはあまり良くない例ですが、世界中で被害を出したランサムウェアの中には、簡単には複合出来ないように暗号化するものもありますよね?)
また、オンザフライ暗号化というのが何かも教えていただきたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2017/11/24 06:09

回答5件
0
こんにちは。
では、簡単に複合されないように暗号化するにはどうしたらいいんですか?
毎回暗号化キーを変え、かつ、復号に必要なキー(対称鍵暗号なら暗号化キー)を復号を許可する人に安全確実に届ける(手渡しが確実かも。ただし、暗号化データとは別に)ことです。
あまり現実的ではない話はさておき、暗号化したデータについては、復号出来る人と出来ない人をどうやって区別するのか?が問題です。復号化キーを持っている人は復号でき、持っていない人は復号できないのが一般的でしょう。
この復号化キーを固定(ハードコーディング)するとどこか1箇所で漏れると、全ての当該復号化キーを持つデータを復号できるので危険ということです。
毎回、復号化キーが異なるようにすれば安全っぽく見えますが、今度は毎回その復号化キーを復号したい人へ届ける必要があります。当然データとは別のルート、かつ、盗聴も成りすまし(他の人が受け取ってしまう)もできないルートを用意する必要がありますが、ここにも脆弱性が発生するリスクがありますし、手間もかかります。
復号化キー配布の手間と安全性を秤にかけて、バランスの良い暗号化システムを構築します。
ですので、全ての場合に適用できる安全なシステムはありません。
また、オンザフライ暗号化というのが何かも教えていただきたいです。
オンザフライ暗号化という言葉は初耳ですが、ググったらVeraCryptがでてきました。
これの前身のTrueCryptは知ってます。暗号化ドライブを作成し、そのドライブから読み出す操作で復号化、書き込む操作で暗号化されます。この暗号化/復号化操作を自動的にリアルタイムにやってくれることを「オンザフライ暗号化」と呼ぶ人が居るのだと思います。
投稿2017/11/24 04:26
総合スコア23274
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2017/11/24 08:04

0
ベストアンサー
RSAなどの公開鍵暗号方式を使うのが良いと思います。
公開鍵暗号方式は、1組(公開鍵[PublicKey]と秘密鍵[SecretKey])の暗号鍵を使うもので、一方の鍵で暗号化したデータを復号できるのは、もう一方の鍵だけという性質を使います。
一例として、AさんとBさんの間でデータ交換する場合:
<前提>
・Aさんの公開鍵(Pa)と、Bさんの公開鍵(Pb)は、両者の間で共有されています。(他の人がPaやPbを知っていてもかまいません)
・Aさんの秘密鍵(Sa)と、Bさんの秘密鍵(Sb)は、それぞれ本人のみが知っています(他の人に知られてはいけません)
AさんからBさんにデータを送る場合の手順:
<Aさんがデータを送る>
- データをBさんの公開鍵(Pb)で暗号化します。暗号化されたデータは、Bさんの秘密鍵(Sb)でしか復号できません。
- 1で暗号化したデータをAさんの秘密鍵(Sa)で暗号化します。暗号化されたデータは、Aさんの公開鍵(Pa)で復号し、さらにBさんの秘密鍵(Sb)で複合しないと元のデータになりません。
- AさんからBさんに2で暗号化したデータを送ります。
=
<Bさんが届いたデータからデータを取り出す>
4) BさんはAさんから届いた暗号化データをAさんの公開鍵(Pa)で復号します。復号でエラーが出たら、その暗号化データはAさんの秘密鍵(Sa)で暗号化されたものではないという事ですから、Aさんになりすました誰かが送り付けた怪しいデータだと判断できます。復号できたら送り主はAさんだと確認できます。
5) 複合したデータを、更にBさんの秘密鍵(Sb)で復号すれば元のデータが得られます。
このように公開鍵暗号方式は、秘密にすべき鍵は本人が持っていれば良くて、相手に知らせる鍵を送る必要がありません。そのため、セキュリティに問題があるネットワークであっても安全にデータのやりとりができます。(秘密鍵を保存しているPCのセキュリティに問題がある(秘密鍵が盗まれる恐れがある)場合は、暗号化をどんなに工夫してもダメですけど)
投稿2017/11/24 05:01
総合スコア6919
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2017/11/24 07:57

0
例示されているランサムウェアの仕組みについて回答します。
公開鍵暗号の仕組みを用いれば、ランサムウェアに復号キーを持たせずとも、以下のような流れで目的を果たせます。
まず攻撃者(ランサムウェアの作者)は
- 公開鍵暗号での公開鍵と秘密鍵を用意。
- ランサムウェアには公開鍵だけを持たせる。
被害者マシン上でのランサムウェアは
- まず適当な共通鍵
A
を生成し、この共通鍵で被害者のデータを暗号化する。 - 上記の共通鍵
A
を攻撃者の公開鍵で暗号化したデータB
を被害者に通知する。
被害者がデータを復号してほしい場合は
B
を攻撃者に送る。- 攻撃者は
B
を攻撃者の秘密鍵で復号して得た共通鍵A
を被害者に渡す。 - 被害者マシン上のランサムウェアはこの共通鍵
A
で被害者のデータを復号する。
投稿2017/11/24 04:41
総合スコア38352
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2017/11/24 08:00

0
現代暗号は、鍵を類推しにくくする(総当たり以外の方法では類推できず、かつ総当たりにかかる時間が天文学的時間になる)ことによって強度を担保しています。
ですから鍵をどこかに保管して、その鍵をどう守るか、が主眼です。
key をハードコードしてはいけないのは、この「鍵を守る」点において問題があるからです。
質問の趣旨とはちょっと違うかもしれませんが、公開鍵暗号を使えば、「暗号化するための鍵」は公開しても、復号するための鍵さえ守れていれば容易には復号できません。
投稿2017/11/24 04:37
総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2017/11/24 08:01

0
いちばん確実なのは、鍵はデータとして保管せずに、復号の都度、人間が入力する方法です。キーロガーやソーシャリエンジニアリングのリスクはありますが、これで正しく実装すればデータだけ流出しても総当り以外の手段はありません。
(どういう状況で使うかがわからなくて、的はずれな回答となっているかもしれません)
投稿2017/11/24 04:17
総合スコア146507
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2017/11/24 08:08

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。