2009-02-25 2 views
13

우리는 Java에서 Rijndael 개발을해야한다는 요구 사항이 있습니다.Java에서 Rijndael 지원

기사, 도서관 등에 대한 권장 사항은 도움이 될 것입니다.

키 저장소 유지 관리에 대한 지침과 어떻게 키를 안전하게 저장합니까?

편집 :

오픈 소스 여야합니다. 본질적으로 Rijndael을 사용하는 데이터의 표준 암호화/해독입니다. http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html 보안 키 저장소로서

은 일반적인 방법은 암호화 해쉬 함수를 이용하여 사용자 입력 (암호)에서 암호화 키를 유도하고,에 유도 된 키를 사용하는 것이다

+0

Rijndael == AES – lImbus

답변

21

Java에는 기본적으로 AES가 포함되어 있습니다. Rijndael은 AES입니다. 외부 라이브러리가 필요하지 않습니다. 다음과 같은 내용이 필요합니다.

byte[] sessionKey = null; //Where you get this from is beyond the scope of this post 
byte[] iv = null ; //Ditto 
byte[] plaintext = null; //Whatever you want to encrypt/decrypt 
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
//You can use ENCRYPT_MODE or DECRYPT_MODE 
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv)); 
byte[] ciphertext = cipher.doFinal(plaintext); 

암호화/암호 해독을위한 것입니다. 대량의 데이터를 처리하는 경우 16 바이트의 배수 인 청크를 읽고 doFinal 대신 update를 호출하는 것이 좋습니다 (마지막 블록에서 doFinal을 호출하기 만하면됩니다).

+7

Rijndael은 AES와 같지 않지만 대신 128 비트의 고정 블록 크기와 지원되지 않는 일부 암호화 모드와 같은 일부 제한 사항이있는 AES입니다. 모든 AES 구현은 Rijndael처럼 사용할 수 있어야합니다. – Cheeso

+14

이것은 정확히 반대로, AES는 Rijndael의 하위 집합입니다. –

+3

@ BrunoRohée이 맞습니다. Rijndael의 하위 집합 인 AES는 다음을 확인하십시오. http://stackoverflow.com/questions/748622/differences-between-rijndael-and-aes – tony9099

1

javax.crypto의은 AES 지원이 키 체인을 암호화합니다. 또는 키가 하나만 필요한 경우 파생 키 자체를 사용할 수 있습니다.

시스템의 보안은 사용 된 해시 함수의 강도와 직접 관련이 있음을 항상 명심하십시오. 가능한 경우 소금과 함께 암호로 안전한 해시 함수를 사용하고 한 번 이상 (예 : 수백 번) 해시합니다.

그 말은 매우 모호합니다.

+0

'javax.crypto'는 매우 최적화 된 버전의 AES를 사용하며 매우 빠르다는 점도 주목할 가치가 있습니다. – tony9099

5

훌륭한 무료 라이브러리는 BouncyCastle.입니다. 적극적으로 유지 관리되며 고품질이며 멋진 코드 예제가 포함되어 있습니다. 참조 문서를 보려면 일반에 대해 더 많이 의존해야합니다. JCE docs.

FIPS 인증 요구 사항을 충족하기 위해 어떤 라이브러리를 사용하는지 말할 수 없습니다. 그러나 CryptoJ의 대안은 훨씬 저렴합니다.

일반적으로 Rijndael과 같은 대칭 암호로 암호화 한 다음 RSA와 같은 비대칭 알고리즘으로 해당 키를 암호화하는 각 메시지에 대해 새 키를 생성하는 것이 좋습니다. 이러한 비공개 키는 PKCS # 12 또는 Java의 "JKS"와 같은 암호로 보호 된 소프트웨어 기반 키 저장소에 저장하거나 "스마트 카드"하드웨어 토큰 또는 기타 암호화 하드웨어 모듈에서 보안을 강화할 수 있습니다.

3

우리 회사가 최근에 알아 낸 것처럼 AES는 Rijndael이 아닙니다. AES는 키가 128, 192 또는 256 비트 여야한다는 제한이 있습니다. 그러나 Rijndael은 160과 224의 키도 허용합니다.

위의 erickson에 표시된 바와 같이 BouncyCastle은 128/160/192/224/256 비트의 추가 키 길이를 지원하는 Rijndael 개체를 제공합니다. 특히 가벼운 API를 살펴보십시오.

Gnu-crypto는 다른 오픈 소스 라이브러리이지만 160 비트와 224 비트 키를 지원하지 않습니다.

그래서 Rijndael의 전체 지원을 찾고 있다면 BouncyCastle 만 내가 지금까지 발견 한 것입니다.

+1

Java for android developmentement를 사용해야하는 경우 (비록 그 질문에 진술하지는 않았지만, Bounty Castle에는 형제가있다는 사실에 주목할 필요가 있습니다. 스폰서 성으로 알려진 안드로이드에 더 많은 유연성을 제공합니다. 아주 좋은 사실) – tony9099

관련 문제