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

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

新規登録して質問してみよう
ただいま回答率
85.50%
暗号化

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

Q&A

解決済

2回答

1113閲覧

暗号化の途中に平文でファイルを生成することは問題がないのか

takuan_no_hito

総合スコア27

暗号化

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

0グッド

1クリップ

投稿2019/06/01 04:39

編集2019/06/01 05:10

前提

C#でデータの簡単な暗号化をしたいなーと思い、
Visual Studio C#でファイルを暗号化してみる

などを参考にプログラムを書いているものです。

プログラムの処理は大体以下のような感じになります

  1. 暗号化されたファイルを復号し、平文ファイルを生成する
  2. 平文ファイルを読み込む
  3. 平文ファイルの処理が終わったら平文ファイルを削除する
  4. ファイルから得られたデータをなんやかんやする
  5. ユーザーなどの入力でデータを処理、更新する
  6. データをファイルに保存する形式にして、平文のファイルをつくる
  7. 平文のファイルを暗号化して、暗号化されたファイルをつくる
  8. 平文のファイルを削除

疑問

コンピュータについて深い理解を持っている訳ではないのですが、ステップ2やステップ7において、平文ファイルが存在しており、情報が生の状態で置いてあることになります。(私が現在製作中のプログラムは大したものではない上、ユーザーに平文ファイルから得たデータを提示したり、ユーザーがデータを更新することができるので、プログラム上ではデータが見られるので、いっそ暗号化なんてしなくても良いぐらいなものですが、)

**ゲームプログラミングなどにおいて、画像の暗号化などをする場合、一旦__temp.png__などのファイルを生成してからプログラムを読み込むという方式は暗号化ファイルが大きくても取るべきでないでしょうか。**メモリ空間的にどうなんでしょう。

修正

  • C#タグの削除

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

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

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

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

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

Zuishin

2019/06/01 05:00

C# タグを外してください。回答者によって言語の得意不得意がありますが、この質問は C# の知識を必要としないので、外した方が広く知見を得られると思います。
takuan_no_hito

2019/06/01 05:11

ご助言ありがとうございます。修正いたしました。
guest

回答2

0

ベストアンサー

暗号化の途中に平文でファイルを生成することは問題がないのか

正直な所、質問内容がよくわかりません。
平文ファイルを作成する事に疑問を感じるのであれば、作成しなければいいだけです。

そもそも、なぜ平文ファイルを作成する必要があるのでしょうか?
また、ファイルの作成、削除を複数回行っていますが本当に必要でしょうか?
平文ファイルを作成する事は冗長ではないでしょうか?
メモリ上で行うと解決すると思うのですがいかがでしょうか。

ゲームプログラミングなどにおいて、画像の暗号化などをする場合、一旦temp.pngなどのファイルを生成してからプログラムを読み込むという方式は暗号化ファイルが大きくても取るべきでないでしょうか。

こちらも上記と同様です。
なぜ平文ファイルを作成する必要があるのでしょうか?

いっそ暗号化なんてしなくても良いぐらいなものですが

そう思うのでしたら暗号化しなくていいのでは、というのが正直な所ですが…。
そもそも、なぜ暗号化しようと思われたのでしょうか。
動機がはっきりしていない場合、「何を対策するために何の暗号を利用して…」という考えが出来ません。

暗号強度が不要であればXORを利用するのはいかがでしょうか。
暗号データのメモリに対して直接復号していく形でコードを書くことができます。
XORは高速ですし、無駄なメモリ消費をする事なく復号が可能です。

投稿2019/06/01 07:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

takuan_no_hito

2019/06/01 08:18

回答ありがとうございます。 >そう思うのでしたら暗号化しなくていいのでは、というのが正直な所ですが…。 今回の場合いらないなとは思っていましたが、暗号化については触れたいと思っていたので、演習も兼ねて導入した形になります。なので、今回は何かを対策するために導入した訳ではないです。 >なぜ平文ファイルを作成する必要があるのでしょうか? 暗号化データファイルから全部復号して全部読み込んだ状態になると、データ量によってはメモリ馬鹿食いして無駄なんじゃないかと思っていたのですが、基本的に最初に全部読み込んでメモリに全部載せておく形を取るのでしょうか。若しかして、何か当方に勘違いがある可能性がありますかね。
退会済みユーザー

退会済みユーザー

2019/06/01 08:31

ファイルすべてを一度にメモリ上に乗せる必要はありません。 暗号化されたファイルをストリームとしてnバイトごと読み込んで、nバイトごと復号すれば良いです。
takuan_no_hito

2019/06/01 08:44

必要になった段階(どこでかはプログラムによると思いますが)で、必要な場所まで復号するということでしょうか? その場合、毎回最初から読み込んでると大変そうですが、どんな感じで実装しているのでしょう。
guest

0

こんにちは。

暗号を復号するプログラムを攻撃者が触れるケースでは、攻撃者の努力が防護者の努力を越えると守れません。逆に攻撃者の努力を越える程度に守っておけば守れます。

ゲーム・プログラムをどの程度ハックしたいと思うか分かりませんが、それに1億円かけたい人はまずいないだろうと思います。数万円ならかけたい人が出てくるかも知れません。
画像を一度復号してHDDに保存後に削除した場合、HDD上の削除ファイルを復元するソフトで復元できる可能性があります。数万円くらいで入手できるものもあるでしょう。

でも、そもそも、そのゲームの写っている画面をキャプチャすれば、その画像を入手できますよね?
であれば、暗号化して保存すれば平文の画像ファイルを保存しておくよりは、取り出すのにひと手間かかるので十分に安全かもしれません。
この分野の法律には詳しくないのですが、もしかすると暗号化ファイルをハックすると何かの法に触れるかもしれないです。その通りの場合は攻撃者は犯罪者になるリスクを負うので、かなり安全になる可能性もあります。

メモリ空間的にどうなんでしょう。

一旦ファイルに保存した方が、メモリ節約できる可能性はあります。(暗号画像と平文画像の両方を同時にメモリに保存しなくていよいので。)

投稿2019/06/01 05:26

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問