RSA 및 OpenSSL을 사용하여 메시지/텍스트를 암호화하는 방법은 무엇입니까?

RSA 및 OpenSSL을 사용하여 메시지/텍스트를 암호화하는 방법은 무엇입니까?

나는 Alice의 공개 키를 가지고 있습니다. RSA 암호화된 메시지를 Alice에게 보내고 싶습니다. 명령을 사용하여 이 작업을 어떻게 openssl수행할 수 있나요?

메시지는 다음과 같습니다.

안녕 앨리스! 저녁 식사로 Malapörkölt를 가져오세요!

답변1

내부에openssl 매뉴얼( opensslman 페이지), 검색하면 RSARSA 암호화 명령이 이라는 것을 알 수 있습니다 rsautl. 그럼 읽어봐rsautl매뉴얼 페이지구문을 확인하세요.

echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted

기본충전 방식원본 PKCS#1 v1.5(여전히 많은 프로토콜에서 사용됨)입니다. openssl은 OAEP(현재 권장) 및 원본 암호화(특수한 경우에만 유용함)도 지원합니다.

openssl을 직접 사용하는 것은 대부분 연습입니다. 실제로는 다음과 같은 것을 사용할 수 있습니다GPG(RSA를 사용하지만 메시지를 직접 암호화하지는 않습니다.)

답변2

우선, 단지 좋은 암호화를 원한다면 다음을 살펴봐야 합니다.GnuPG. 하지만 실험을 하고 있고 그것이 어떻게 작동하는지 이해하고 싶다면 무엇을 알아야 합니까?RSA예. RSA는 임의의 문자열을 암호화하도록 설계된 것이 아니라 정수를 암호화하는 알고리즘입니다. 구체적으로 0과 n-1 사이의 정수입니다. 여기서 n은 공개 키의 모듈러스 값입니다. 1024비트 RSA 키에 대해 이야기하면 모듈러스를 이진 형식으로 저장하는 데 1024비트가 필요하다는 의미입니다. 이것이 RSA가 대칭 키 암호와 함께 사용되는 이유 중 하나입니다.DES또는AES. AES용 임의의 256비트 키를 생성하고 1024비트 RSA 공개 키를 사용하여 키를 암호화할 수 있습니다. 개인 키에 액세스할 수 있는 사람은 누구나 대칭 키를 추출하고 AES를 사용하여 메시지를 디코딩할 수 있습니다. RSA의 완전한 표준은 다음과 같습니다.PKCS #1

또한 DES와 AES는 블록 암호입니다. 특정 크기의 블록으로만 데이터를 암호화합니다. DES는 64비트 블록을 사용하고 AES는 128비트 블록을 사용합니다. 여러 블록을 암호화하려면 다음을 사용해야 합니다.작동 모드예를 들어 CBC 또는 CTR입니다. 이러한 모드는 블록 모드 암호를 사용하여 비트스트림을 암호화하는 방법을 지정합니다.

마지막으로, 수신한 데이터를 확인하는 것이 중요합니다. 공격자가 전송 중인 데이터를 읽을 수는 없지만 데이터 스트림에 무결성이나 신뢰성이 적용되지 않으면 감지되지 않고 비트를 뒤집을 수 있습니다. 공격자는 포트 443에 대한 SSL 연결이 로 시작하는 웹 페이지 요청일 수 있다고 쉽게 추측할 수 있으며 나머지 암호화를 방해하지 않고 GET /비트를 뒤집어 이를 변경할 수 있습니다 . PUT /무결성을 달성하는 간단한 방법은 끝에 MD5 또는 SHA-1 합계를 추가하는 것입니다. 그러나 이는 데이터 신뢰성이 아닌 데이터 무결성만을 제공합니다. 데이터 흐름에 대한 완전한 지식을 가진 사람은 누구나 정확한 합계를 생성할 수 있습니다. 보다 안전한 방법은 이와 같은 키 해시를 사용하는 것입니다.하마카이를 위해서는 생성된 키에 대한 지식이 필요하므로 무결성 외에 데이터의 신뢰성도 제공됩니다.

답변3

아래에서는 나열된 알고리즘이든 RSA이든 원하는 알고리즘을 지정할 수 있습니다(OpenSSL이 RSA에 사용하는 정확한 이름은 모르지만).

시스템에서 지원되는 암호 목록을 가져오려면 "openssl enc -help"를 사용하여 매개변수로 전달하세요. 예: "-aes256"

내 시스템에는 내 옵션에 RSA가 없습니다. 적어도 해당 이름은 아닙니다.


S/MIME 메시지를 암호화하는 방법은 무엇입니까?

누군가가 당신에게 공개 인증서를 보내고 그녀에게 보내는 일부 메시지를 암호화하도록 요청한다고 가정해 보겠습니다. 그녀의 인증서를 her-cert.pem으로 저장했습니다. 답변을 my-message.txt로 저장했습니다.

기본(다소 약하긴 하지만) RC2-40 암호화를 얻으려면 openssl에 메시지와 인증서가 있는 위치를 알려주면 됩니다.

openssl smime her-cert.pem -encrypted-in my-message.txt

원격 당사자가 강력한 SSL 툴킷을 가지고 있다고 확신하는 경우 Triple DES와 같은 더 강력한 암호화 알고리즘을 지정할 수 있습니다.

openssl smime her-cert.pem -encrypt-des3 -in my-message.txt

기본적으로 암호화된 메시지(메일 헤더 포함)는 표준 출력으로 전송됩니다. -out 옵션이나 셸을 사용하여 파일로 리디렉션합니다. 또는 더 까다로운 방법은 출력을 직접 sendmail로 파이프하는 것입니다.

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My encrypted reply' |\
 sendmail [email protected]

S/MIME 메시지에 서명하는 방법은 무엇입니까?

전체 메시지를 암호화할 필요는 없지만 수신자가 메시지의 무결성을 확인할 수 있도록 서명하려는 경우 접근 방식은 암호화와 비슷합니다. 가장 큰 차이점은 수신자의 인증서로는 아무 것도 서명할 수 없기 때문에 자신만의 키와 인증서가 필요하다는 것입니다.

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My signed reply' |\
 sendmail [email protected]

(에서http://www.madboa.com/geek/openssl/)

(으... 역슬래시가 모두 이스케이프된 개행 문자여야 합니다. 편집 상자에 잘 표시되기 때문에 무슨 일이 일어나고 있는지 잘 모르겠습니다!

관련 정보