공개 키 방식(PKC, Public Key Cryptographym)은 전형적인 비대칭키 암호 방식을 사용합니다. 공개키와 개인키로 구성된 두개의 키로 암호화/복호화를 진행합니다. 공개키와 개인키는 ECDSA라는 타원 곡선 알고리즘을 사용해 생성됩니다. 공개키는 외부에 공개해도 되지만 개인키는 비밀리에 보관해야 합니다.
발신자는 공개키를 사용해서 데이터를 암호화 합니다. 수신자는 개인키로 암호화된 데이터를 전달 받은 후 복호화를 진행합니다. 공개 키 방식(PKC) 방식을 사용하면 승인된 사용자에게만 데이터를 안전하게 전달할 수 있습니다. 대표적으로 HTTPS 프로토콜을 구현하기 위한 TLS에서 사용됩니다.
개인키 암호화 방식은 개인키로 데이터를 암호화한 뒤 수신자는 공개키를 사용해 복호화를 진행합니다. 공개키는 모두에게 공개되어 있기 때문에 쉽게 복호화가 가능하지만, 암호화는 오직 개인키를 가지고 있는 사람만 할 수 있습니다. 즉, 데이터 내용보다 누가 이 데이터를 보냈느냐가 더 중요할 때 사용하는 방식입니다. 대표적으로 전자 서명(Digital Signature)에 사용됩니다.
디지털 서명(Digital Signature)
각종 문서들이 종이에서 디지털로 전환되면서 진위성과 무결성을 검증하는 도구가 필요하게 됩니다. 디지털 서명은 문서의 진위와 무결성을 검증하기 위해 수학적인 알고리즘을 사용하는 매커니즘입니다. 일반 문서에 도장이나 사인을 해서 진위여부를 판단하는 방식과 유사하지만 암호학이 적용되면서 보안면에서 우수한 성능을 보입니다. 데이터 무결성을 보장함은 물론 진위성 검증, 메시지 출처, 신원에 대한 보증을 제공할 수도 있습니다.
디지털 서명을 어렵게 이해하실 필요 없습니다. 간단히 말해 데이터에 첨부된 하나의 코드입니다. 코드가 생성되면 수신자에게 전송될 때 까지 메시지 내용이 위변조 되었는지 확인이 가능해집니다. 일반적으로 계약을 할 때 나만 가지고 있는 인감으로 도장을 찍는 것 처럼 개인키를 사용해 본인임을 인증해서 거래 내용의 진위를 판단할 수 있게 됩니다.
공개키 방식과 디지털 서명의 가장 큰 차이점은 암호화/복호화 방식입니다. 공개키 방식은 공개키로 암호화를 진행하는 반면, 디지털 서명은 개인키를 가지고 디지털 서명을 작성합니다. 복호화도 공개키 방식은 개인키로 복호화를 진행하지만 디지털 서명은 공개키로 복호화 한 후 원본 데이터의 해시값과 비교하게 됩니다.
동작방식
디지털 서명은 전체적으로는 공개키 방식을 사용하지만 추가적으로 해싱, 서명, 검증 3가지 단계로 구분됩니다. 원본 데이터를 해싱한 후 개인키를 사용해 암호화를 합니다. 디지털 서명과 원본 데이터를 전송한 후 수신자는 원본 데이터를 해싱하고 디지털 서명을 공개키로 복호화 한 후 2개의 데이터를 비교/검증합니다.
① 해싱
원본 데이터의 크기가 제각각이기 때문에 고정된 길이의 해시값으로 변경해주는 작업입니다. 해싱 과정은 생략해도 되지만 고정된 길이의 데이터를 암호화하는 과정에서 데이터 무결성을 보장해주기 때문에 일반적으로는 해싱 과정을 포함해 디지털 서명을 하게 됩니다.
② 서명
공개키 암호화 방식을 사용해 디지털 서명을 합니다. 공개 키 암호화 방식은 개인키로 암호화, 공개키로 복호화 하는 방식입니다. 자신만이 가지고 있는 개인키로 해싱된 원본 데이터를 암호화합니다. 암호화된 결과물이 바로 디지털 서명입니다.
송신자의 개인키로 암호화된 디지털 서명은 공개키로 복호화가 가능합니다. 즉 디지털 서명을 공개키로 복호화하면 원본 데이터를 해싱한 값이 나오게 됩니다. 이제 송신자는 디지털 서명, 원본 데이터, 공개키 3개를 수신자에게 전송합니다.
③ 검증
수신자는 전달받은 공개키를 가지고 디지털 서명을 복호화합니다. 디지털 서명이 송신자의 개인키로 정상적으로 암호화 되었다면 원본 데이터의 해시값을 얻을 수 있습니다. 수신자는 전달받은 원본데이터를 해싱한 후 해시값을 얻습니다. 만약 2개의 값이 동일하다면 데이터가 정상적으로 송신자에 의해 서명되었음을 알 수 있습니다.
디지털 서명의 장점
데이터 무결성
수신자는 데이터가 전송되는 과정에서 해당 데이터가 위변조 되지 않았음을 신뢰할 수 있습니다. 공개키로 복호화한 데이터가 원본데이터 해싱값과 다른 경우 송신자의 디지털 서명이 정상적으로 되지 않았거나 전송과정에서 데이터가 위변조 되었음을 알 수 있기 때문입니다.
데이터 진위성
수신자가 데이터의 진위를 신뢰하기 위해서는 송신자의 개인키가 안전하게 보관되었다는 전제가 깔려야 합니다. 수신자는 디지털 서명을 확인하고 송신자에 의해 생성되었음을 신뢰할 수 있습니다.
부인 방지
수신자는 송신자의 개인키가 안전하게 보관되었다는 전제하에 서명이 생성된 후 해당 서명이 송신자에 의해 생성되었음을 부정할 수 없습니다. 디지털 서명을 받고 나서 딴 소리 못하게 됩니다.
디지털 서명을 하기 위해서는?
정상적인 디지털 서명을 작성하기 위해서는 알고리즘, 정상적인 시스템, 개인키 보관 3가지가 전제되어야 합니다. 블록체인에서도 디지털 서명을 사용해 송금을 위한 트랜잭션을 서명하고 승인하게 됩니다. 개인키를 가지고 있는 사람만 월렛을 사용해 코인을 사용할 수 있게 됩니다.
알고리즘
디지털 서명에는 해싱 암호화 방식과 공개키 방식 2가지의 암호학 기술이 적용됩니다. 여기서 사용되는 알고리즘은 범용적으로 신뢰가 가능하고 안정성이 입증된 알고리즘을 사용해야 합니다. 컴퓨터의 성능이 올라가면서 DES 방식이 폐기된 것 처럼 쉽게 뚫지 못하는 알고리즘이 필요합니다.
무결점 시스템 구현
디지털 서명 방식을 통해 수신자는 데이터의 무결성과 진위를 신뢰할 수 있어야 합니다. 따라서 보안에 취약한 시스템은 사용할 수 없습니다.
개인키 보관
디지털 서명 방식에서 어떻게 보면 가장 중요한 요소가 바로 개인키입니다. 송신자의 신원을 증명하기 때문입니다. 만약 개인키를 탈취당하면 재정적인 손실로 이어집니다. 실제로 AWS에서도 RSA 알고리즘 기반 공개키 방식을 사용합니다. 프로그램에 익숙하지 못한 사람이 개인키.pem을 Github에 올려서 1000만원 이상 과금 되는 사례가 등장하고 있습니다. 해커들은 개인키를 탈취해 AWS EC2를 채굴용 PC로 사용할 수도 있습니다. 개인키는 항상 안전에 만전을 다하셔야 합니다.
'Blockchain' 카테고리의 다른 글
[Blockchain] 핫 월렛 콜드 월렛 차이 (암호화폐 지갑이란?) (0) | 2022.06.21 |
---|---|
[Security] 해시 함수 알고리즘 특징 (0) | 2022.06.20 |
[Security] 대칭키 비대칭키 암호화 방식 비교 (0) | 2022.06.20 |
[Security] 암호학(Cryptography), 정보 보안 3요소 (0) | 2022.06.20 |
[Blockchain] NFT 투자 제대로 알고 하자 (암호화폐, 블록체인) (0) | 2022.06.18 |
댓글