問題タブ [encryption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encryption - 個々のファイルにパスワード保護を実装する方法は?
データ ファイルを暗号化し、パスワードで保護できる小さなデスクトップ アプリを作成しています (つまり、解読するには正しいパスワードを入力する必要があります)。暗号化されたデータ ファイルを自己完結型で移植可能にしたいので、認証をファイルに埋め込む必要があります (またはそう思います)。
私が知っていることに基づいて、実行可能で論理的に見える戦略があります (これはおそらく危険であるには十分です) が、それが実際に優れた設計であるかどうかはわかりません。だから教えてください:これはクレイジーですか?それを行うためのより良い/最良の方法はありますか?
- ステップ 1: ユーザーは、「MyDifficultPassword」などの平文のパスワードを入力します。
- ステップ 2: アプリはユーザー パスワードをハッシュし、その値を対称キーとして使用してデータ ファイルを暗号化/復号化します。例: "MyDifficultPassword" --> "HashedUserPwdAndKey"。
- ステップ 3: アプリはステップ 2 のハッシュ値をハッシュし、新しい値をデータ ファイル ヘッダー (つまり、データ ファイルの暗号化されていない部分) に保存し、その値を使用してユーザーのパスワードを検証します。例: "HashedUserPwdAndKey" --> "HashedValueForAuthentication"
基本的に、Web サイトのパスワードを実装する一般的な方法 (つまり、OpenID を使用していない場合) から推測しています。これは、ユーザーのパスワードの (ソルト化された) ハッシュを DB に保存し、実際のパスワードを決して保存しないことです。 . しかし、対称暗号化キーにハッシュ化されたユーザー パスワードを使用しているため、認証に同じ値を使用することはできません。したがって、もう一度ハッシュして、基本的に別のパスワードと同じように扱い、二重にハッシュされた値をデータ ファイルに保存します。そうすれば、ファイルを別の PC に持っていき、パスワードを入力するだけで復号化できます。
では、この設計は合理的に安全なのか、それともどうしようもなくナイーブなのか、あるいはその中間なのか? ありがとう!
編集: 明確化とフォローアップの質問: ソルト。
ソルトは有用であるためには秘密にしておく必要があると思いましたが、あなたの回答とリンクはそうではないことを示唆しています. たとえば、 erickson によってリンクされたこの仕様(以下) は次のように述べています。
したがって、ここで定義されているパスワードベースの鍵導出は、パスワード、ソルト、および反復回数の関数であり、後者の 2 つの量を秘密にしておく必要はありません。
これは、ハッシュ化されたキーと同じ場所/ファイルにソルト値を保存でき、ハッシュ時にソルトをまったく使用しない場合よりも安全であることを意味しますか? それはどのように機能しますか?
もう少しコンテキスト: 暗号化されたファイルは、他のユーザーと共有したり復号化したりすることを意図したものではなく、実際にはシングル ユーザー データです。しかし、完全に制御していないコンピューター (職場など) の共有環境に展開し、ファイルをコピーするだけでデータを移行/移動できるようにしたい (自宅や別の場所で使用できるようにするため)ワークステーションなど)。
database - データ暗号化
多くのクレジット カード情報を格納するデータベースは、完成したばかりのシステムに不可欠な部分です。私が望んでいるのは、カード番号の究極のセキュリティであり、暗号化と復号化のメカニズムをセットアップしますが、特定の番号を復号化することはできません.
私が求めているのは、この情報をデータベース レベルで保護して、誰もカード番号のファイルを作成できないようにする方法です。他の人はこの問題をどのように克服しましたか? これに対する「標準」アプローチとは何ですか?
データの使用に関しては、リンクはすべて非公開で安全であり、レコードが作成されて暗号化される場合を除いてカード番号の送信は行われないため、バックエンドだけでフロントエンドについて心配する必要はありません.
データベースは ORACLE なので、PL/SQL と Java で遊ぶことができます。
asp.net - SQL Server 2005 の暗号化、asp.net、およびストアド プロシージャ
SQL Server 2005、asp.net、および ado.net を使用して Web アプリケーションを作成する必要があります。このアプリケーションに保存されているユーザー データの多くは、暗号化する必要があります (HIPAA を参照)。
以前は、暗号化が必要なプロジェクトでは、アプリケーション コードで暗号化/復号化を行っていました。ただし、これは通常、パスワードやクレジット カード情報を暗号化するためのものでした。このアプリケーションでは、いくつかのテーブルのはるかに多くの列を暗号化する必要があるため、特に SQL Server 2005 がいくつかの暗号化タイプをネイティブでサポートしていることを考えると、暗号化の責任をデータ レイヤーにプッシュする方がパフォーマンスが向上すると思います。(誰かが実際の経験的証拠を持っていれば、そうではないと確信できます。)
私は BOL に相談したことがありますが、Google の使い方にはかなり慣れています。したがって、オンラインの記事や MSDN のドキュメントへのリンクは必要ありません (既に読んでいる可能性があります)。
これまでに頭を悩ませてきた 1 つのアプローチは、証明書を使用して開かれる対称キーを使用することです。
したがって、1 回限りのセットアップ手順は次のとおりです (理論的には DBA によって実行されます)。
- マスターキーを作成する
- マスター キーをファイルにバックアップし、CD に書き込み、オフサイトに保存します。
- マスター キーを開き、証明書を作成します。
- 証明書をファイルにバックアップし、CD に書き込み、オフサイトに保存します。
- 証明書を使用して、選択した暗号化アルゴリズムで対称キーを作成します。
次に、ストアド プロシージャ (または Management Studio を介した人間のユーザー) が暗号化されたデータにアクセスする必要があるときはいつでも、最初に対称キーを開き、tsql ステートメントまたはバッチを実行してから、対称キーを閉じる必要があります。
次に、asp.net アプリケーションに関する限り、そして私の場合はアプリケーション コードのデータ アクセス レイヤーに関する限り、データ暗号化は完全に透過的です。
だから私の質問は:
開いて、tsql ステートメント/バッチを実行し、対称キーをすべて sproc 内で閉じますか? 私が見る危険は、tsql の実行で何か問題が発生し、コード sproc の実行がキーを閉じるステートメントに到達しない場合です。これは、sproc が実行された SPID を SQL が強制終了するまで、キーが開いたままになることを意味すると思います。
代わりに、実行する必要がある特定のプロシージャに対して 3 つのデータベース呼び出しを行うことを検討する必要がありますか (暗号化が必要な場合のみ)。キーを開くための 1 回のデータベース呼び出し、sproc を実行するための 2 回目の呼び出し、およびキーを閉じるための 3 回目の呼び出し。(開いているキーが最終的に閉じられる可能性を最大化するために、各呼び出しは独自の try catch ループでラップされます。)
クライアント側のトランザクションを使用するために必要な考慮事項はありますか (私のコードはクライアントであり、トランザクションを開始し、いくつかの sproc を実行し、成功すると仮定してトランザクションをコミットすることを意味します)?
encryption - マシン間での暗号化/復号化は不可
XP と Vista の間で "CryptUnprotectData" (Crypt32.dll から公開) に対して同じ呼び出しを使用しています。XPでは問題なく動作します。Vista で実行すると、次の例外が発生します。
予想どおり、crypt32.dll のバージョンは XP と Vista で異なります (SP3 またはその他の更新の結果として、実際には XP の方が新しいバージョンになっています)。
より具体的には、データを暗号化してレジストリに入れ、「CryptUnprotectData」を使用して読み取りと復号化を行っています。UAC がオフになっています。
これを前に見た人はいますか?
encryption - 暗号化と共に初期化ベクトル (IV) を使用する必要がありますか?
初期化ベクトルを使用してデータを暗号化/復号化することは推奨されますか? それは物事をより安全にしますか?ケースバイケースで評価する必要があるものの1つですか?
これを実際の文脈に当てはめると、Win32 暗号化関数CryptSetKeyParamを使用すると、暗号化/復号化の前にキーに初期化ベクトルを設定できます。他の API でもこれが可能です。
一般的に推奨されるものとその理由は何ですか?
encryption - CrystalReports CMSデータベースにクエリを実行するにはどうすればよいですか?
Crystal CMSデータベースにクエリを実行して、意味のあるデータを取得することは可能ですか?データは暗号化されているようです。
Business Objects CrystalReportServerバージョン11.5を実行しています
encryption - 特許のない一方向暗号化アルゴリズム
できれば c で、単純な特許のない一方向暗号化アルゴリズムを探しています。パスワードの検証に使用したいと思います。
security - データベースでメールアドレスを暗号化する価値はありますか?
私はすでに塩漬けハッシュを使用してデータベースにパスワードを保存しています。つまり、レインボー テーブル攻撃の影響を受けないはずです。
しかし、私は考えました: 誰かが私のデータベースを手に入れたらどうしますか? ユーザーの電子メールアドレスが含まれています。これらを使用して通知メールなどを送信するため、これらを実際にハッシュすることはできません..
それらを暗号化する必要がありますか?
c# - C#に圧縮および暗号化ライブラリはありますか?
一部のファイルを( ZIP形式に)圧縮し、可能であればC#を使用して暗号化したい。これを行う方法はありますか?
圧縮自体の一部として暗号化を行うことはできますか?
python - Pythonで使用するのに最適/最も簡単な暗号化ライブラリは何ですか?
Python を使用していくつかのファイルを暗号化したいのですが、標準/有名な Python ライブラリを使用して gpg/pgp を使用できる最良の方法は何ですか?