RSA를 이용해서 private key / public key를 생성했어
그럼 public key로 암호화한건 private key로 풀 수 있잖아?
그런데 private key로 암호화한걸 Public key로도 풀 수 있는거임??
네트워크 책에서 디지털 서명쪽 읽고 있는데 public key로 private key가 암호화한거 풀 수 있는거같은데
RSA를 이용해서 private key / public key를 생성했어
그럼 public key로 암호화한건 private key로 풀 수 있잖아?
그런데 private key로 암호화한걸 Public key로도 풀 수 있는거임??
네트워크 책에서 디지털 서명쪽 읽고 있는데 public key로 private key가 암호화한거 풀 수 있는거같은데
퍼블릭키로는 풀수 없음
개솔
공개키로 복호화가 가능하다고??????
openssl manpage만 봐도 RSA_private_encrypt 랑 RSA_public_decrypt 함수쌍 있는데여
어? 그러네 ㄱㅅㄱㅅ
ㅇㅇ
priv키로 암호화한게 pub키로 복호화가 되기 때문에 전자서명이란개 가능한 것. alice가 어떤 문서의 해시값을 자신의 priv키로 암호화하고 bob에게 전달했을 때 bob이 alice의 pub키로 복호화 해보고 복호화가 성공했다면 이 서명을 생성할 수 있는건 alice의 priv키를 가진 자(=alice)만이기 때문에 전자서명이 신뢰를 갖는거지
이제 여기서 파생되는 이슈가 이 pub 키가 진짜 상대의 pub 키인지 어떻게 신뢰하느냐 그런게 있어서 pki 같은게 도입되는거고
서명은 복호화가 아니라 검증임 위에 댓글 단 애 이상하게 설명함
서명 시스템 내부적으로 보면 암복호화임 코드 보면 RSA_sign은 RSA_private_encrypt 쓰고 RSA_verify는 RSA_public_decrypt 씀 메세지의 해시에 대해 암복호화를 수행하니까 메세지의 confedentiality를 보장하지는 않지만 어쨌든 내부적 동작은 복호화임
함수 이름은 rsa_ossl_private_encrypt, rsa_ossl_public_decrypt지만 위에 커멘트로 signing, signature verification이라 쓰여 있음
https://github.com/openssl/openssl/blob/master/crypto/rsa/rsa_ossl.c#L509-L604
https://github.com/openssl/openssl/blob/master/crypto/rsa/rsa_ossl.c#L238-L369
https://youtu.be/hhTc1tUgQRo
여기서도 그렇고, 굳이 trapdoor의 개념을 설명하기 번거로우니까 암호화 복호화라고 뭉뚱그려 설명하는 경향이 있는듯
암복호화라고 뭉뚱그려서 표현하는게 아니라 실제 암복호화가 맞는데?
https://security.stackexchange.com/questions/23060/rsa-encrypted-hash-rsa-signature
RSA에 한해서는 메세지 해시값을 private key로 exponent 취한거라 publickey로 exponent 하면 메세지 해시값 다시 recover 되서 암복호화라고 부를 수 있음 DSA나 ECDSA같은거는 정확한 알고리즘은 기억 안나는데 서명이 임복호화가 아니었던거로 기억하는데 RSA는 암복호화 맞음
역함수 개념이라고 보면됨 - dc Cpp
역함수도 아님 이상한 개념 주입시키지 마라
pub키로 메시지 암호화 -> pri 키로 복호화 가능 pri키로 메시지의 지문 생성 -> pub키로 지문이 메시지에서 나온 것임을 검증
지문생성도 어떻게 보면 암호화라고 할 수 있는 부분이 있는게 메시지의 해시를 취한 다음 pri키로 숨기는 연산을 함. 하지만 어떤 해시가 튀어나올지 알 수 없기 때문에 메시지 자체를 전달하는 역할로서는 무용지물이지 Rsa 이외의 시스템은 모르겠음