質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

5回答

2914閲覧

複合されにくい暗号化の方法を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

3クリップ

投稿2017/11/24 04:07

編集2017/11/24 06:10

暗号化を施す際、keyをハードコードすると簡単に複合されてしまいますよね?
では、簡単に複合されないように暗号化するにはどうしたらいいんですか?

(これはあまり良くない例ですが、世界中で被害を出したランサムウェアの中には、簡単には複合出来ないように暗号化するものもありますよね?)

また、オンザフライ暗号化というのが何かも教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keieicho

2017/11/24 05:12

「セキュリティ」タグもつけておいた方がよろしいかと。
退会済みユーザー

退会済みユーザー

2017/11/24 06:09

そうですね!ありがとうございます
guest

回答5

0

こんにちは。

では、簡単に複合されないように暗号化するにはどうしたらいいんですか?

毎回暗号化キーを変え、かつ、復号に必要なキー(対称鍵暗号なら暗号化キー)を復号を許可する人に安全確実に届ける(手渡しが確実かも。ただし、暗号化データとは別に)ことです。

あまり現実的ではない話はさておき、暗号化したデータについては、復号出来る人と出来ない人をどうやって区別するのか?が問題です。復号化キーを持っている人は復号でき、持っていない人は復号できないのが一般的でしょう。
この復号化キーを固定(ハードコーディング)するとどこか1箇所で漏れると、全ての当該復号化キーを持つデータを復号できるので危険ということです。

毎回、復号化キーが異なるようにすれば安全っぽく見えますが、今度は毎回その復号化キーを復号したい人へ届ける必要があります。当然データとは別のルート、かつ、盗聴も成りすまし(他の人が受け取ってしまう)もできないルートを用意する必要がありますが、ここにも脆弱性が発生するリスクがありますし、手間もかかります。
復号化キー配布の手間と安全性を秤にかけて、バランスの良い暗号化システムを構築します。

ですので、全ての場合に適用できる安全なシステムはありません。

また、オンザフライ暗号化というのが何かも教えていただきたいです。

オンザフライ暗号化という言葉は初耳ですが、ググったらVeraCryptがでてきました。
これの前身のTrueCryptは知ってます。暗号化ドライブを作成し、そのドライブから読み出す操作で復号化、書き込む操作で暗号化されます。この暗号化/復号化操作を自動的にリアルタイムにやってくれることを「オンザフライ暗号化」と呼ぶ人が居るのだと思います。

投稿2017/11/24 04:26

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/24 08:04

回答ありがとうございます! そうですね。公開鍵暗号方式を上手く使うといいようですね。 また、オンザフライ暗号化に関してもわかりました。ありがとうございました
guest

0

ベストアンサー

RSAなどの公開鍵暗号方式を使うのが良いと思います。
公開鍵暗号方式は、1組(公開鍵[PublicKey]と秘密鍵[SecretKey])の暗号鍵を使うもので、一方の鍵で暗号化したデータを復号できるのは、もう一方の鍵だけという性質を使います。

一例として、AさんとBさんの間でデータ交換する場合:
<前提>
・Aさんの公開鍵(Pa)と、Bさんの公開鍵(Pb)は、両者の間で共有されています。(他の人がPaやPbを知っていてもかまいません)
・Aさんの秘密鍵(Sa)と、Bさんの秘密鍵(Sb)は、それぞれ本人のみが知っています(他の人に知られてはいけません)

AさんからBさんにデータを送る場合の手順:
<Aさんがデータを送る>

  1. データをBさんの公開鍵(Pb)で暗号化します。暗号化されたデータは、Bさんの秘密鍵(Sb)でしか復号できません。
  2. 1で暗号化したデータをAさんの秘密鍵(Sa)で暗号化します。暗号化されたデータは、Aさんの公開鍵(Pa)で復号し、さらにBさんの秘密鍵(Sb)で複合しないと元のデータになりません。
  3. AさんからBさんに2で暗号化したデータを送ります。

=
<Bさんが届いたデータからデータを取り出す>
4) BさんはAさんから届いた暗号化データをAさんの公開鍵(Pa)で復号します。復号でエラーが出たら、その暗号化データはAさんの秘密鍵(Sa)で暗号化されたものではないという事ですから、Aさんになりすました誰かが送り付けた怪しいデータだと判断できます。復号できたら送り主はAさんだと確認できます。
5) 複合したデータを、更にBさんの秘密鍵(Sb)で復号すれば元のデータが得られます。

このように公開鍵暗号方式は、秘密にすべき鍵は本人が持っていれば良くて、相手に知らせる鍵を送る必要がありません。そのため、セキュリティに問題があるネットワークであっても安全にデータのやりとりができます。(秘密鍵を保存しているPCのセキュリティに問題がある(秘密鍵が盗まれる恐れがある)場合は、暗号化をどんなに工夫してもダメですけど)

投稿2017/11/24 05:01

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/24 07:57

回答ありがとうございます! 「公開鍵方式は、公開鍵で暗号化したモノを秘密鍵で複合出来る」というのは知っていましたが、秘密鍵で暗号化して公開鍵で複合する処理を噛ませることで本人確認が出来るというのを初めて知りました! 「電子署名が出来る」みたいな事をどこかで読みましたが、よく分からないまま放置していたので助かりました。
guest

0

例示されているランサムウェアの仕組みについて回答します。
公開鍵暗号の仕組みを用いれば、ランサムウェアに復号キーを持たせずとも、以下のような流れで目的を果たせます。

まず攻撃者(ランサムウェアの作者)は

  • 公開鍵暗号での公開鍵秘密鍵を用意。
  • ランサムウェアには公開鍵だけを持たせる。

被害者マシン上でのランサムウェアは

  • まず適当な共通鍵Aを生成し、この共通鍵で被害者のデータを暗号化する。
  • 上記の共通鍵A攻撃者の公開鍵で暗号化したデータBを被害者に通知する。

被害者がデータを復号してほしい場合は

  • Bを攻撃者に送る。
  • 攻撃者はB攻撃者の秘密鍵で復号して得た共通鍵Aを被害者に渡す。
  • 被害者マシン上のランサムウェアはこの共通鍵Aで被害者のデータを復号する。

参考:ランサムウェアを作ってみた(シェルスクリプトで)

投稿2017/11/24 04:41

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/24 08:00

恐らく、公開鍵暗号方式に加えて共通鍵を利用しているのは、各自で複合させるため(暗号化された被害者のデータが大きすぎるためデータを送るのは現実的でない)からですよね。 なるほど箇条書きでとてもわかりやすい解説ありがとうございました!
guest

0

現代暗号は、鍵を類推しにくくする(総当たり以外の方法では類推できず、かつ総当たりにかかる時間が天文学的時間になる)ことによって強度を担保しています。
ですから鍵をどこかに保管して、その鍵をどう守るか、が主眼です。

key をハードコードしてはいけないのは、この「鍵を守る」点において問題があるからです。

質問の趣旨とはちょっと違うかもしれませんが、公開鍵暗号を使えば、「暗号化するための鍵」は公開しても、復号するための鍵さえ守れていれば容易には復号できません。

投稿2017/11/24 04:37

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/24 08:01

回答ありがとうございます! 公開鍵暗号を使えば色々工夫できることがわかりました
guest

0

いちばん確実なのは、鍵はデータとして保管せずに、復号の都度、人間が入力する方法です。キーロガーやソーシャリエンジニアリングのリスクはありますが、これで正しく実装すればデータだけ流出しても総当り以外の手段はありません。

(どういう状況で使うかがわからなくて、的はずれな回答となっているかもしれません)

投稿2017/11/24 04:17

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/11/24 08:08

回答ありがとうございます! 今回はやり取りするデータを暗号化する際のベストプラクティスについて質問しました。 もちろん極論どこかで会ってKeyを教え合って、その都度手打ちすれば漏えいの心配は皆無なのでしょうが、やはりプログラム内部で暗号化/複合するのが現実的ですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問