問題タブ [cryptography]
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.
c# - C#でのオンザフライ暗号化
私はC#を学んでいます。オンザフライの暗号化プログラムをコーディングしたい。Truecryptに似たもの。基本的に暗号化されたコンテナを作成します。このコンテナは仮想ドライブとしてマウントでき、ハードドライブに書き込むことなくファイルをその場で復号化できます。Truecryptはいくつかのフィルタードライバーを使用しています[私はそれらが何であるかわかりません]。それがc#で実装できるかどうかを知る必要があります。ドライバープログラミングを学ぶ必要がありますか?ドライバーを使用せずに実行できますか?何を学ぶ必要がありますか?
java - java.security.SignatureとMessageDigestおよびCipherでのSHA1とRSAの使用
Javajava.security.Signatureクラスが何をするのかを理解しようとしています。SHA1メッセージダイジェストを計算し、RSAを使用してそのダイジェストを暗号化すると、Signatureクラスに同じものに署名するように要求した場合とは異なる結果が得られます。
結果(例):
入力データ:これは署名されているメッセージです
ダイジェスト:62b0a9ef15461c82766fb5bdaae9edbe4ac2e067
暗号文:057dc0d2f7f54acc95d3cf5cba9f944619394711003bdd12 ...
署名:7177c74bbbb871cc0af92e30d2808ebae146f25d3
私はSignatureが何をしているのかについて根本的な誤解を持っている必要があります-私はそれをトレースしました、そしてそれは私が期待するようにアルゴリズムがSHA1に設定されたMessageDigestオブジェクトでupdateを呼び出しているようです、そしてダイジェストを取得し、そして暗号化。結果が異なる理由は何ですか?
編集:
Leonidasは、署名スキームが私が思うことを実行することになっているのかどうかを確認させてくれました。RFCで定義されている署名には2つのタイプがあります。
これらの最初のもの(PKCS1)は、私が上で説明したものです。ハッシュ関数を使用してダイジェストを作成し、結果を秘密鍵で暗号化します。
2番目のアルゴリズムはランダムなソルト値を使用し、より安全ですが決定論的ではありません。上記のコードから生成された署名は、同じキーを繰り返し使用しても変更されないため、PSSではないと思います。
編集:
これが私が使っていたbytes2string
方法です:
.net - RSACryptoServiceProvider、サービス アカウントのアクセス許可でファイルが見つかりませんか?
当社の Web サービスは、次のコードを含むサードパーティ ライブラリをラップしています。
IIS 6 アプリケーション プールで Active Directory サービス アカウントを使用しています (対話型ログイン機能はありません)。「指定されたファイルが見つかりません」というエラーでサービスが失敗します。エラーの原因をRSACryptoServiceProvider provider = new RSACryptoServiceProvider();
. サード パーティのアセンブリは、暗号化プロセスを x509 ファイル ベースの証明書に依存しており、サービス アカウントにはキー フォルダーへの読み取り/書き込みアクセス権があります。さらに、サービス アカウントには、次に対する読み取り、書き込み、変更の権限があります。
「C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys」.
コード:
FileMon をクラックして開いたところ、その AppPool に FILE NOT FOUND があり、その後にまったく同じファイルに別の SUCCESS があることに気付きました。
私はここで私の要素から外れています。なぜこれが見られるのかについて誰か考えがありますか?
security - パスワード ハッシュの非ランダム ソルト
更新: 私は最近、この質問から、以下の議論全体で、私 (そして他の人もそうだったと確信しています) が少し混乱していることを知りました: 私がレインボーテーブルと呼んでいるものは、実際にはハッシュテーブルと呼ばれています. レインボー テーブルはより複雑な生き物であり、実際にはヘルマン ハッシュ チェーンの変形です。答えは同じだと思いますが (暗号解読に帰着しないため)、議論の一部は少し歪んでいる可能性があります。
質問: 「レインボー テーブルとは何ですか。どのように使用されますか?」
通常、レインボー テーブル攻撃から保護するなど、ハッシュ関数 (パスワードなど) で使用するために、暗号的に強力なランダム値をソルトとして使用することを常にお勧めします。
しかし、ソルトがランダムであることが実際に暗号学的に必要なのでしょうか? この点で、任意の一意の値 (userId など、ユーザーごとに一意) で十分でしょうか? 実際には、単一のレインボー テーブルを使用してシステム内のすべて (またはほとんど) のパスワードをクラックすること
はできません... しかし、エントロピーの欠如はハッシュ関数の暗号強度を本当に弱めますか?
ソルトを使用する理由、ソルトを保護する方法 (必須ではない)、単一の定数ハッシュを使用する (使用しない)、または使用するハッシュ関数の種類については質問していないことに注意してください。
ソルトにエントロピーが必要かどうかだけです。
これまでの回答に感謝しますが、私が(少し)あまり慣れていない分野に焦点を当てたいと思います. 主に暗号解読への影響 - 誰かが暗号数学の PoV から何らかの意見を持っていれば幸いです。
また、考慮されていなかった追加のベクトルがある場合、それも素晴らしい入力です(複数のシステムに関する@Dave Sherohmanのポイントを参照してください)。
それを超えて、理論、アイデア、またはベストプラクティスがある場合は、証拠、攻撃シナリオ、または経験的証拠のいずれかでこれをバックアップしてください. または、許容可能なトレードオフについての有効な考慮事項です... 私はこの件に関するベストプラクティス (大文字の B と大文字の P) に精通しています。これが実際にどのような価値を提供するかを証明したいと思います。
編集:ここでいくつかの本当に良い答えがありますが、@Daveが言うように、一般的なユーザー名のレインボーテーブルに帰着すると思います...そしてあまり一般的でない名前も考えられます。ただし、ユーザー名がグローバルに一意である場合はどうなりますか? 私のシステムでは必ずしも一意ではありませんが、各ユーザーごとに-たとえば、電子メールアドレス。
1 人のユーザー向けに RT を構築するインセンティブはなく (@Dave が強調したように、salt は秘密にされていません)、これでもクラスタリングが妨げられます。唯一の問題は、別のサイトで同じ電子メールとパスワードを使用している可能性があることですが、いずれにせよソルトはそれを防ぎません。
では、暗号解読に戻ります。エントロピーは必要かどうか? (私の現在の考えでは、暗号解読の観点からは必要ではありませんが、他の実際的な理由から必要です。)
asp.net-mvc - .NET 3.5 SP1 へのアップグレード後に Html.AntiForgeryToken() が原因でエラーが発生する
.NET 3.5 SP1 に更新したところ、以前は動作していた ASP.NET MVC ページが動作しなくなりました。
ページを読み込もうとすると、次のYSODが表示されます
行を削除すると
すべてが再び機能します。これを引き起こしている可能性のあるアイデアはありますか? これが MVC または .NET の問題である場合、解決策を見つけるのにもっと幸運が期待できたので、それは私の構成に関係していると思います。
MVC フレームワークを再インストールして、SP1 より前にインストールしたことが原因かどうかを確認しましたが、それでも同じ問題が発生します。Google と SO の検索では、確固たる結論は得られませんでした。
hash - 2 つの異なるハッシュ関数を使用することは、ファイルの整合性をチェックする良い方法ですか?
ユーザーがファイルをアップロードできる Web サイトがあります。これらはサーバーに保存され、そのメタデータはデータベースに記録されます。簡単な整合性チェックを実装しています。つまり、「このファイルの内容は、アップロードされたときとバイト単位で同じですか?」などです。
例: のコンテンツのuserfile.jpg
場合、MD5 ハッシュは39f9031a154dc7ba105eb4f76f1a0fd4
で、SHA-1 ハッシュは878d8d667721e356bf6646bd2ec21fff50cdd4a9
です。このファイルのコンテンツが変更されたが、前後で同じ MD5 ハッシュを持つ場合、SHA-1 ハッシュも同じままである可能性は高いですか? (ハッシュを使用すると、ハッシュの衝突が発生することがあります。これは、2 つの異なるハッシュ アルゴリズムを同時に使用すると発生する可能性がありますか?)
それとも、ファイルの 2 つの異なるハッシュを計算しても意味がありませんか (整合性を検証するために他のメカニズムを試す必要があります)。
編集:偶発的な破損についてはあまり心配していませんが、ユーザーが気付かずにファイルを変更するのを防ぐことになっています(誕生日の攻撃と友人)。
私はおそらく 1 つのハッシュ、SHA-512 を使用します - チェックがパフォーマンスのボトルネックになることはそれほど多くありませんが、「Bruce Schneier が言うように、高速で安全でないシステムはすでに十分に存在します。」コメント」。
python - PythonでRSASHA1署名をどのように検証しますか?
文字列、署名、公開鍵があり、文字列の署名を確認したいと思います。キーは次のようになります。
pycryptoのドキュメントをしばらく読んでいますが、この種のキーを使用してRSAobjを作成する方法がわかりません。あなたがPHPを知っているなら、私は次のことをしようとしています:
また、用語がわからない場合はお知らせください。
iphone - iPhone アプリケーションで機密データを秘密にするにはどうすればよいでしょうか?
iPhone アプリから Web サービスにアクセスする必要があるとします。この Web サービスでは、アプリが共有シークレットを「知っている」ことを証明するために、クライアントが HTTP 要求にデジタル署名する必要があります。クライアントキー。リクエストの署名は HTTP ヘッダーに格納され、リクエストは単純に (HTTPS ではなく) HTTP 経由で送信されます。
このキーは常に秘密にしておく必要がありますが、iPhone アプリで使用する必要があります。
では、クライアント側に機密情報を保存しないように常に言われている場合、このキーを安全に保存するにはどうすればよいでしょうか?
平均的なユーザー (ユーザーの 99%) は、喜んでアプリケーションを使用します。なりすましによってサービスまたはクライアント キーの所有者に危害を加えるために、その秘密のクライアント キーを欲しがる誰か (敵?) がいるでしょう。そのような人は、自分の電話をジェイルブレイクし、バイナリにアクセスし、「文字列」または 16 進エディタを実行して、あちこち歩き回る可能性があります。したがって、キーをソース コードに格納するだけでは、ひどい考えになります。
もう 1 つのアイデアは、文字列リテラルではなく、バイト リテラルから作成された NSMutableArray にキーをコードに格納することです。
キーチェーンを使用することはできますが、iPhone アプリはキーチェーンに物を保存するためにパスワードを提供する必要がないため、アプリのサンドボックスにアクセスできる誰かが、その中のアイテムを簡単に見たり、簡単にデコードしたりできるようになるのではないかと心配しています。
編集 - だから私はキーチェーンについてこれを読みました:どのアプリケーションからもアクセスできないようにデバイス上で保護されています。」
したがって、おそらくこれがキーを保存するのに最適な場所です....もしそうなら、アプリのキーチェーンに事前に入力されたキーをどのように出荷すればよいですか? それは可能ですか?そうでなければ、キーがソース コードに含まれていない状態で、最初の起動時にキーを追加するにはどうすればよいでしょうか? うーん..
編集 - http://bugreport.apple.comでバグ レポート # 6584858 を提出
ありがとう。
oop - 暗号システムとその鍵を処理するオブジェクト指向クラスをどのように設計しますか?
これは以前の質問よりも広い質問ですが、関連しています。
ADFGVXやVIC cipherなどの旧式の暗号システムを Ruby で実装したいと考えています。これらの暗号システムは、置換 (Caesar などの単一アルファベットまたは Vigenere などの多アルファベット) や転置 (単純、二重) などのより一般的なシステムの上に構築されています。私の質問は、暗号システムとキーの両方を処理するクラスの階層をどのように作成するかということです。
Vigenere < Substitution < SimpleCipher のようなものですか? キーはどうですか?一部の置換キーは使用前に圧縮されます (「ARABESQUE」は「ARBESQUE」になります) が、ほとんどの移調キーはそうではありません。
現在、私は非常に基本的な設計ドキュメント( basicと言いました) を持っていますが、考えてみると、満足のいく方法を見つけることができないようです。
実装は Ruby で行いますが、設計で多重継承を使用する必要がない限り、それは Ruby 自体に関するものではありません。
ここMercurialでの概念実証(まだ実行可能ではなく、おそらく間違っている) 。