2012-02-06 4 views
2

나는이 질문을 알고있다. 그래서 안드로이드에서 구현 된 AES 256의 주요한 문제점은 StackOverflow에서 인기가있다. 그러나 주요한 문제는 없다. 어떤 솔루션도 AES 256의 정확한 암호화와 해독을 제공하지 않는다. 128 및 256 길이가 올바르지 않습니다.안드로이드에서 AES 256 암호화 구현

KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
     SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); 
     sr.setSeed(seed); 
     kgen.init(256, sr); // 192 and 256 bits may not be available 
     SecretKey skey = kgen.generateKey(); 
     byte[] raw = skey.getEncoded(); 
     return raw; 

그러나 AES 256 구현이 256 키 길이가 아닌 것은 다릅니다. 저에게 맞는 해결책을 제안 해주십시오.

미리 감사드립니다.

+0

귀하의 질문을 이해할 수 있는지 확실하지 않습니다. 질문 : "128 비트 또는 256 비트가 아닌 키 재료가있는 경우 어떻게 AES-128 또는 AES-256 키를 만들 수 있습니까?" –

+0

예 David ....... 이것은 질문입니다. –

+0

키 입력 자료는 얼마나 많은 엔트로피가 있습니까? 그리고 왜 AES126보다 AES256을 사용하고 싶습니까? – CodesInChaos

답변

3

보유하고있는 키 자료가 암호 인 경우 PBKDF2을 사용해야합니다. 그렇지 않다면 256 비트가 될 키 재료의 SHA-256 해시를 사용하면 충분할 것입니다. 128 비트 키의 경우 해시의 절반 만 사용하십시오.

100 비트 미만의 키 재료를 사용하는 것은 극히 권장 할만한 사항입니다.

0

AES256 항상은 256 비트 키를 사용합니다. 키 자료의 길이가 다른 경우 SHA-256과 같은 해시 함수의 출력을 사용하여 256 비트 키를 얻을 수 있습니다.

그러나 키 자료에 256 비트 미만의 엔트로피가있는 경우 이는 256 비트 보안을 얻지 못한다는 것을 의미합니다. 실용적인 보안은 128 비트 보안을 크게 벗어나면 어려움을 겪습니다.

키 자료가 암호 인 경우 PBKDF2와 같은 키 유도 함수를 사용하여 키를 가져옵니다. 상대적으로 낮은 엔트로피 암호로 보안을 강화하기 위해 의도적으로 느립니다.