RSA암호화시에 메시지 길이가 어디까지 되는지...
글쓴이: mg2000 / 작성시간: 화, 2009/02/17 - 3:55오후
제가 OpenSSL에 있는 RSA알고리즘을 이용해서 암호화를 해 보려고 하는데요.
2048bit의 길이로 키를 만들면, 평문의 길이가 어떻튼간에 256바이트(2048비트)로
암호화가 되는데요.
그런데 평문의 길이를 256바이트로 해서 암호화를 하려고 하니, 암호화가 안되네요.
이것저것 넣어보니 245바이트까지는 암호화가 되는데요.
키에 길이에 따라서 메시지 길이가 어느정도까지 암호화할 수 있는지 계산을 하려면
어떻게 해야 할까요?
Forums:
openssl 에서 패딩을
openssl 에서 패딩을 지원해서 별다르게 연산을 할 필요없이 암호화가 가능했습니다.
즉, 암호화를 하실때 패딩 처리를 빼먹으신 것 같습니다. ㅡ.ㅡ;;;
잠깐 검색해 보니...
RSA_public_encrypt(strlen(plainText), plainText, cipherText, rsa, RSA_PKCS1_PADDING);
와 같은 형태로 사용하면 알아서 패딩이 되네요~
테스트 해 본 것은 아니니 openssl 사이트에서 공식 문서를 한 번 확인해 보세요.
RSA_public_encrypt를 사용했는데요.
RSA_PKCS1_PADDING의 패딩 크기가 11바이트인것 보니,
평문의 길이를 키의 길이 - 11바이트로 해서 넣어줘야 하는건지...
공식 문서도 incomplete인 상태로 된 부분이 많아서 제가 원하는 부분 찾기도 어렵더라고요.
소스에 들어있는 데모를 이용해서 이모조모 해보고 있습니다만, 여렵네요. ㅜ.ㅡ
평문의 길이를 키의
평문의 길이를 키의 길이 -11 바이트로 해서 넣는게 아닙니다. ;;;
그냥 평문의 길이를 넣어주면 됩니다.~!
RSA 알고리즘에서
Encoded Message(EM)은
EM = 0x00 || 0x02 || PS || 0x00 ||Message입니다.
EM은 256byte이고, PS길이의 최소값은 8byte 이기 때문에, 평문의 길이는 최대 245byte입니다.
따라서 245바이트까지 암호화가 되는 것입니다.
즉
즉, 암호화는 245byte까지 됩니다 ㅎㅎㅎ
댓글 달기