2011-12-18 17 views
9

JavaScriptとJavaの両方に対応した安全な対称鍵暗号アルゴリズムを探しています。対称鍵暗号化アルゴリズム

私は実装しようとしましたが、エンコードの問題がありました。

+2

"compatible"とはどういう意味ですか? – hellectronic

+0

私はJavaScriptで暗号化し、Javaで復号化することができます。逆も同様です。エンコードの問題はありません。 –

+2

[すべてのソフトウェア開発者が絶対に最低限必要とする、絶対確実にUnicodeと文字セットについて知っておく必要があります(言い訳はありません)]を読むことをお勧めします(http://www.joelonsoftware.com/articles/Unicode.html) – hellectronic

答えて

32

JavaScriptで暗号化したくない場合はespecially on the client-side where it is open to tamperingcryptographically secure random number generatorはありません。

私は実装しようとしましたが、エンコードの問題がありました。

独自の暗号アルゴリズムを作成しようとしましたか?あなたは、セキュリティ界が大切にしているすべてのものに反対してきました。彼らはその背後にある数学を理解していないため、暗号化作品は、人々が物事を台無しにしようとしていることをとても怖がっている、私は実際にそれらのいずれかでこれを見てきた方法を説明し、実際のチュートリアル番号:

enter image description here

あなたが暗号化を理解できない場合、「暗号的に安全な擬似乱数ジェネレータ」が実際に何をしているのか、それに対する一般的な攻撃のようなものは、そうしてはいけません。

サイドチャネル攻撃などのことを理解できない場合は、そのようにしないでください。

暗号で何が起こっているのか分からず、少なくとも2冊の本を読んだら、それを実装するビジネスはありません。

Cryptoは魔法のブラックボックスではありません。パッケージ化されたソリューションのコードに触れることなく、非常に簡単に壊れやすいものです。

となりますか? JS暗号化については忘れてください。私は知っている、私はそれを自分で試してみました。それは時間の無駄です。私の過ちから学ぶ。

SSL証明書を取得すると、SSLはサーバーからクライアントへのトランスポートレベルのメッセージを暗号化するための最善の方法です。それはあなたが得ることができるほど安全です。あなたがSSLを倒すことができる盗賊に直面して、私を信じているなら、あなたのJSベースの暗号も危うくなります。

改ざんから保護されているサーバーにいると、暗号化されます。それ以外はあなたの時間を無駄にする本当に長い道のりです。また

、これらの本を読んで行く:

This one is free This one is cash money

あなたが理解するときそして、彼らが戻ってきて、私が間違っているとあなたはJSのを必要とするどのくらい理解していない理由について私に悲鳴暗号を行うクライアント。

3

私は非常に頻繁に使用する優れたDES(および拡張3DES)実装をJSに実装しています。私は月曜日、私がオフィスにいて、準備ができたらリンクを張ります。これの結果(トランスポートのbase64エンコーディング後)は、.Net/Mono(組み込み)、Java(bulitin)、PHP(mcrypt)で完全に機能します。

リンクは見つかりましたが、どちらも死んでいます:http://www.shopable.co.uk/des.htmlhttp://www.netdealing.comです。私はそれを置いたhttp://pastebin.com/KbRsWKJY

+1

Mhh大学で彼らは私にDESを簡単に解読できると教えてくれました... AESは大丈夫ですが、JavaScriptのようなものは扱えないと思います。 –

+2

DESはブルートフォース攻撃のために簡単に解読可能ですが、DESedeは解読が容易ではありません。 AESはDESedeよりも高速な実装であるため、JavaScriptがDESedeを処理できる場合は、AES-128を確実に処理できます。従来の実装(または、別のライブラリを見つけられず、小さなブロックサイズ、弱いキー、キーのパリティビットなどの弱点を理解できない場合のみ)にDESedeを使用してください。 –

+1

JSコードを指しているということは、(3)クライアント側のDESの無反射の使い方を無神論的に受け入れていることを意味するものではありません。しかし、私はそれを事実と考えています、JS暗号を使用することは、深い意味のある層になります。だから私はそれを使う。どこが理にかなっていると思う。 –

1

This pageは、Javaで利用可能なCTRモードを持っています。私は128ビットのキーをお勧めしますか、より大きなキーサイズでJavaのエクスポートポリシーに関する問題に遭遇するかもしれません。

Hereはパスワード暗号化技術や完全性検査と認証を含む暗号化などの非常に便利な暗号化方法を使用するページですが、それらをすべて一致させるためにJavaの弾力のあるキャッスルライブラリが必要な場合があります。

JavaScript用のライブラリがたくさんありますが、いずれにも文字エンコーディングの問題が存在します。 JavaScript側とJava側の両方で同じエンコーディングを使用するようにしてください。クイックルックアップは、JavaScriptが内部的にUTF-16を使用することを保証しますが、私にそれを掛けないでください。

最後に、これを自宅で試してはいけません。ライブラリはそこにあります(特にテストや公式テストベクタがある場合)。

+0

Bouncy Casteを使用するAESのJava実装はどこにありますか? –

+0

Bouncy Castleライブラリは、JCE/JCAプロバイダを実装しています。したがって、ほとんどの機能はJava自体の暗号APIに追加されます。弾力のある実装にアクセスするには、たとえば次のようにします。 Cipher.getInstance( "algo/mode/padding"、 "BC"); *あなたがSecurityクラスにプロバイダを追加した後にのみ*適用されます。また、セキュリティ機能の下位レベルのBC実装に直接アクセスすることもできます。 –

+0

2つの例がありますか? JavaScript:http://www.movable-type.co.uk/scripts/aes.html; Java:http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html –

0

他の回答と同様に、JavaScriptで暗号化する必要がない場合は避けてください。ただし、JavaScriptで暗号化する有効な使用例がいくつかあります。

必要な場合は、このライブラリをお勧めします:https://keybase.io/triplesec/

これは、DESよりも安全です。これは別の回答とリンクしています。