키 전송 (Key Transport)

중급암호학수정일

키 전송(Key Transport)은 한 당사자가 생성한 비밀 키(예: 세션 키)를 상대방에게 안전하게 전달하는 키 확립 방식입니다. 보통 받는 사람의 공개 키나 미리 공유한 키 암호화 키(KEK)로 비밀 키를 암호화해 보냅니다. 양쪽이 각자 값을 내어 공통 키를 함께 계산하는 키 합의(key agreement)와 대비되는 개념입니다.

자세히 알아보기

대표적인 예는 RSA 키 전송입니다. 보내는 쪽이 무작위 세션 키를 만들어 받는 쪽의 RSA 공개 키로 암호화해 보내면, 받는 쪽만 자신의 개인 키로 복호화할 수 있습니다. 미국 NIST SP 800-56B가 이런 RSA 기반 키 전송 방식을 규정합니다. 대칭 키 환경에서는 KEK로 데이터 키를 감싸는 키 래핑(key wrapping)이 키 전송에 해당합니다.

키 전송의 핵심 과제는 두 가지입니다. 첫째, 전송하는 비밀 키가 도청되지 않도록 암호화해야 합니다. 둘째, 사용하는 공개 키가 정말 상대방의 것인지 인증해야 합니다. 공개 키는 비밀이 아니어서 암호화 없이 보내도 되지만, 공격자가 중간에서 자신의 공개 키로 바꿔치기하면 중간자 공격이 성립합니다. 그래서 인증서(PKI)나 지문 대조 같은 별도의 인증 수단이 필요합니다.

현대 프로토콜은 키 합의를 선호합니다. 키 전송 방식에서는 받는 쪽의 장기 개인 키가 나중에 유출되면 과거에 기록된 세션 키까지 모두 풀릴 수 있기 때문입니다. TLS 1.3은 RSA 키 전송을 없애고, 순방향 안전성(forward secrecy)을 제공하는 임시 (타원곡선) 디피-헬만 키 합의만 허용합니다.

키 전송과 키 합의는 함께 쓰이기도 합니다. 예를 들어 이메일 암호화 표준에서는 메시지마다 무작위 콘텐츠 키를 만든 뒤 수신자의 공개 키로 그 콘텐츠 키를 전달하는데, 이는 키 전송에 해당합니다. 반면 실시간 통신에서는 디피-헬만 방식으로 세션 키를 합의하고 그 위에서 추가 키를 파생합니다. 어떤 방식이든 키의 생성, 전달, 사용, 폐기까지 전 과정을 관리하는 키 관리 정책이 있어야 안전합니다.

블록체인·암호화폐에서는

블록체인 트랜잭션 자체는 서명으로 이뤄지므로 키 전송이 필요하지 않지만, 지갑과 서비스 주변에서는 자주 등장합니다. 하드웨어 지갑과 앱 사이의 보안 채널, 거래소의 콜드 월렛 키 백업 이전, MPC 지갑에서 키 조각을 다른 장치로 옮길 때가 그 예입니다. 개인 키나 시드 구문은 원칙적으로 기기 밖으로 옮기지 않는 것이 가장 안전하며, 메신저나 클립보드로 복사해 보내는 것은 피해야 합니다.

쉽게 말하면

금고 열쇠를 상대방만 열 수 있는 자물쇠 상자에 넣어 택배로 보내는 방식입니다. 다만 그 자물쇠 상자가 정말 상대방 것인지 먼저 확인해야 합니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.