RSA는 두 개의 키 쌍, 공개키(Public Key)와 비밀키(Private Key)를 사용하는 암호화 방식입니다.
공개키는 누구나 알 수 있지만, 비밀키는 소유자만이 가지고 있어 데이터를 안전하게 보호할 수 있습니다.
공개키로 암호화된 데이터는 비밀키로만 복호화할 수 있어, 안전한 통신과 인증에 쓰입니다.
•
공개키 (.pub) : 암호화 또는 인증 검증에 사용하며, 서버의 authorized_keys 등에서 사용
•
비밀키 (.pem) : 데이터를 복호화하거나 서명하는 데 사용되고, 외부에 절대 노출되어선 안 됨
공개키는 자물쇠 역할, 비밀키는 그 자물쇠를 여는 열쇠 역할이라고 이해하면 됩니다.
RSA는 인터넷 보안, SSH 접속 등 다양한 분야에서 널리 쓰이는 기본 암호 기술입니다.
작성 개요
윈도우즈 환경에서는 putty 설치 시 같이 설치되는 puttygen 프로그램으로 RSA 키 세트를 만들곤 합니다.
puttygen GUI의 경우 맥OS를 지원하지 않아, 아쉽게도 맥 사용자들은 터미널에서 openssl 명령어로 RSA 키세트를 만들 수 있습니당.
(하지만 오히려 명령어로 만드는게 훨씬 편해요)
기본 명령어
1.
비밀키 생성 (PEM)
# 비밀키 생성 (PEM 형식)
openssl genpkey -algorithm RSA -out "my-key.pem" -pkeyopt rsa_keygen_bits:2048
Bash
복사
2.
공개키 생성 (PEM)
openssl rsa -pubout -in "my-key.pem" -out "my-key.pub.pem"
Bash
복사
3.
공개키 OpenSSH 형식으로 변환 (authorized_keys에 적합)
ssh-keygen -i -m PKCS8 -f "my-key.pub.pem" > "my-key.pub"
Bash
복사
4.
변환용 임시 PEM 공개키 삭제
rm -f "my-key.pub.pem"
Bash
복사
활용
키 생성이 잦은 사용자의 경우, 매번 명령어를 치기 귀찮기 때문에 bash, zsh 환경에서 간편하게 사용할 수 있도록
쉘 환경설정에 ( .bashrc or .zshrc ) 함수 형태로 등록하는게 좋습니다.
genrsa() {
if [ -z "$1" ]; then
echo "Usage: genrsa <keyfilename>"
echo "Example: genrsa mykey"
return 1
fi
# 비밀키 생성 (PEM 형식)
openssl genpkey -algorithm RSA -out "${1}.pem" -pkeyopt rsa_keygen_bits:2048 || return 1
# 공개키 생성 (PEM 형식)
openssl rsa -pubout -in "${1}.pem" -out "${1}.pub.pem" || return 1
# 공개키를 OpenSSH 형식으로 변환 (authorized_keys에 적합)
ssh-keygen -i -m PKCS8 -f "${1}.pub.pem" > "${1}.pub" || return 1
# 변환용 임시 PEM 공개키 삭제
rm -f "${1}.pub.pem"
echo "Generated keys: ${1}.pem (private), ${1}.pub (public, OpenSSH format)"
}
Bash
복사
1.
사용 방법
genrsa {파일명}
Bash
복사
genrsa my-key
Bash
복사
# 실행 결과
....+....+...........+...+.+.........+..+....+.....+.+........+.+.....+.......+...............+........+....+..+......+...+++++++++++++++++++++++++++++++++++++++*....+.+...+......+.....+....+..+...+.......+..+..........+..+.+..............+......+....+.....+...+............+.+++++++++++++++++++++++++++++++++++++++*..+.....+..........+..+....+.....+......+...+...+....+...........+....+.....+......+.......+..+...+.+..+.......+...............+.....+.............+.........+.....+.+.....+..................+.......+...+.....+.......+..+............+...+.......+...+...+.....+...+....+...........+.......+........+.+.....+...................+..............+.+....................+.+...+...+............++++++
...............+..+....+.....+.......+........+............+.......+...+.....+............+...+....+.....+...+...+...+.+++++++++++++++++++++++++++++++++++++++*..+....+...........+.......+...+..+++++++++++++++++++++++++++++++++++++++*............+.....+...+.............+...+.........+......+.....+.........+.+...........+...+...+....+...+......+.........+..+.+.....+..................+....+........+...+.......+........+.......+..+.......+...............+.....+.+..................+..+.........+.............+...+.........+........+......+......+....+..+...+............+.......+...+............+..+...+.+......+.....+...+...+...............+.......+...+.........+.........+......+......+.....+.........+.+........+....+...+..+...+.......+..+.........+.+...............+.....+.+...+............+..+...............+............+.............+..+......+....+...+..+......+....+.........++++++
writing RSA key
Generated keys: my-key.pem (private), my-key.pub (public, OpenSSH format)
Bash
복사
2.
생성된 파일 확인
ll
Bash
복사
# 실행 결과
total 16
drwxr-xr-x@ 4 pjw staff 128 11월 13 14:12 .
drwx------@ 3791 pjw staff 121312 11월 13 14:12 ..
-rw-------@ 1 pjw staff 1704 11월 13 14:12 my-key.pem
-rw-r--r--@ 1 pjw staff 381 11월 13 14:12 my-key.pub
Bash
복사
cat my-key.pub
Bash
복사
# 실행 결과
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrXrXVXCkhI8LcSlTPQI/SjmthWnsjkFfn6mf1ZgdDtvkd8AiLOBcAc8OMnBhzqv0BjknVg1YQ9tAuTxz5eAgvAhcQJrn7jr9E4X8UX3oLf9BjdvYWbPyzhoRT/sH7SYxL14Uw2HeeVg4QtGP98MBi/11NgTimdKAhbaEZHojz3paIOPI5VOyk9MiyIQVSNBEPAnVPaEtvHIynLu+Sm0bfYOkVjydfCupzcQRgwwb8rZeJcHGZ821fUav1vASdGFLbtd/G82d3YTwdvwJDJW54yVLpFjUG8eus8LcGD23smTnyWeV1UchGis/vxd3C1vd38qtKG1Bc/IJSl0U3TJgP
Bash
복사
