2010-12-01 3 views
0

HMACSHA512를 사용하여 공유 키를 사용하여 데이터를 해시합니다. 키가 공유되어 있기 때문에 전송 용이성을 위해 인쇄 가능한 모든 문자를 사용하고 싶습니다. 가장 좋은 방법은 이러한 키를 생성하는 것입니다 궁금하네요..Net에서 인쇄 가능한 HMAC 공유 키 생성

현재 RNGCryptoServiceProvider의 GetBytes() 메서드를 사용하여 키를 생성하고 있지만 반환하는 바이트 배열에는 인쇄 할 수없는 문자가 포함되어 있습니다. 그래서 base64 인코딩 결과를 암호화하는 경우 또는 난독성을 너무 많이 침식하고 것들을 훨씬 덜 안전하게 궁금하네요? 이것이 좋은 접근 방법이 아니라면 제안 할 수 있습니까?

인쇄 가능한 문자로 키를 제한함으로써 키 공간의 전체적인 폭을 제한한다는 것을 이해합니다 (예 : 8 비트 중 1 개를 잘라내는 것).

답변

3

키를 자동으로 생성하지 못하는 경우 http://www.grc.com/passwords은 매우 중요한 임의의 키 자료의 좋은 출처입니다.

Base64는 바이트 배열의 기본 엔트로피를 줄이지 않습니다. 키를 생성하여 원시 형식으로 사용할 수 있지만 Base64로 인코딩하면 필요한 위치로 전송할 수 있습니다. 그런 다음 Base64를 새로운 위치에서 사용하기 전에 원시 형식으로 다시 디코딩 할 것입니다. 이 작업에서는 엔트로피가 손실되지 않습니다. Base64 인코딩은 엔트로피를 8 대신 바이트 당 6 비트로 줄이지 만 코딩 결과가 더 길기 때문에 전반적으로 엔트로피는 동일합니다.

당신이 할 수있는 다른 방법은 192 비트 분량의 엔트로피에 대해 24 개의 임의 바이트를 얻는 것입니다. Base64로 인코딩하면 32 비트의 문자열 (256 비트)을 얻을 수 있으며 여전히 원래 임의성과 192 비트의 엔트로피가 있습니다. 이것을 공유 키로 직접 사용할 수 있습니다.

+1

첫 문장은 수수께끼입니다. –

+0

Andrew에게 확인해 주셔서 감사합니다. 24 바이트 배열을 생성하고 32 바이트로 인코딩하는 base64를 생성하는 마지막 접근 방식을 취할 것입니다. – BrettRobi

3

BASE64는 바이트 시퀀스를 변환하여 인쇄 가능한 특정 문자 만 사용합니다.

이 변환은 정보의 저장 방법을 변경하지 않습니다. 또한 되돌릴 수 있습니다. BASE64 출력을 디코딩하여 원래의 바이트 시퀀스를 얻을 수 있습니다.

따라서 BASE64를 사용하면 "임의성을 없애지"않거나 어떤 식 으로든 키 공간을 제한하지 않습니다.