2011-12-18 6 views
9

JavaScript 및 Java와 호환되는 안전한 대칭 키 암호화 알고리즘을 찾고 있습니다.대칭 키 암호화 알고리즘

구현을 시도했지만 일부 인코딩 문제가 있습니다.

+2

"호환"이란 무엇입니까? – hellectronic

+0

그래서 나는 자바 스크립트로 암호화하고 자바로 해독 할 수 있으며 인코딩 문제 없이도 해독 할 수 있습니다. –

+2

[모든 소프트웨어 개발자가 절대적으로 최소로 절대적으로, 절대적으로 유니 코드와 문자 집합에 대해 알고 있어야합니다 (변명 없음)] (http://www.joelonsoftware.com/articles/Unicode.html) – hellectronic

답변

32

JavaScript로 암호화하지 않으려면 especially on the client-side where it is open to tampering이고 cryptographically secure random number generator은 없습니다.

구현을 시도했지만 인코딩 문제가 있습니다.

자신의 암호화 알고리즘을 작성하려 했습니까? 당신은 보안 세계가 소중하게 여기는 모든 것에 반대했습니다.

enter image description here

: 암호화 작품은 사람들이 뒤에 수학을 이해하지 않기 때문에 일을 망치려고하고 있다는 것을 너무 무서워 방법을 설명하는 제 실제 자습서, 사실은 그들 중 하나에서 본 적이

암호화를 이해할 수 없다면 "암호로 안전한 의사 난수 생성기"가 실제로 무엇인지, 일반적인 공격인지는 이해할 수 없습니다.

사이드 채널 공격 같은 것을 이해하지 못한다면 그렇게해서는 안됩니다.

암호화에서 무슨 일이 벌어지고 있는지 이해하지 못하고 적어도 두 권의 책을 읽었다면 구현할 사업이 없습니다.

Crypto는 마법의 블랙 박스가 아니며 패키지 솔루션의 코드를 건드리지 않아도 매우 쉽게 망가뜨릴 수 있습니다.

무엇 해야합니까? JS 암호화는 잊어 버리십시오. 나도 알아, 나는 그것을 직접 시도했다. 시간 낭비입니다. 내 실수에서 배우십시오.

SSL 인증서를 가져 오면 SSL은 서버에서 클라이언트로 전송되는 수준의 메시지를 암호화하는 가장 좋은 방법입니다. 당신이 얻을 수있는만큼 안전합니다. SSL을 무력화시킬 수있는 advesary를 만나면 저를 믿으십시오. JS 기반 암호화도 손상됩니다.

변조 된 것으로부터 안전한 것으로 확인되면 서버에서 암호화합니다. 다른 것은 당신의 시간을 낭비하는 정말 먼 길입니다.

또한,이 책 읽기 이동 : 당신이 그들을 다시 와서 내가 틀렸다 이유에 대해 나에게 비명을 당신이에 JS 필요 얼마나 이해하지 못하고 이해하면 다음

This one is free This one is cash money

을 클라이언트는 암호화를 수행합니다.

3

꽤 자주 사용하는 JS에는 우수한 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 비트의 키를 권하고 싶다. 또는 더 큰 키 사이즈에서 자바 수출 정책에 관한 문제가 생길 수도있다.

Here은 패스워드 암호화 기술과 무결성 검사 및 인증을 포함하는 매우 유용한 암호화 방법을 사용하는 페이지입니다. 자바에 성스러운 성서 라이브러리가 필요합니다.

JavaScript에는 많은 라이브러리가 있지만 문자 인코딩 문제가있을 수 있습니다. 따라서 자바 측뿐만 아니라 자바 측에서도 동일한 인코딩을 사용해야합니다. 빠른 조회는 JavaScript가 UTF-16을 내부적으로 사용하지만 나에 대해 내게 응답하지 않음을 보증합니다.

마지막으로 집에서 시도하지 마시고 라이브러리를 사용하십시오 (특히 테스트 및/또는 공식 테스트 벡터를 언급 할 경우).

+0

Bouncy Caste를 사용하는 AES의 Java 구현은 어디에서 찾을 수 있습니까? –

+0

Bouncy Castle 라이브러리는 JCE/JCA 공급자를 구현합니다. 따라서 대부분의 기능이 Java 자체의 암호화 API에 추가됩니다. 예를 들어 다음을 사용하여 탄력적 인 구현에 액세스 할 수 있습니다. Cipher.getInstance ("algo/mode/padding", "BC"); Security 클래스에 공급자를 추가 한 후에 만 ​​* 사용합니다. 보안 기능의 하위 수준 BC 구현에 직접 직접 액세스 할 수도 있습니다. –

+0

두 가지 예가 호환 가능합니까? 자바 스크립트 : 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보다 더 안전합니다.