실습> openssl로 암호화/복호화 하기, OpenSSL을 이용한 RSA 사용하기, RSA 공개키 알고리즘 이해하기

SW·2023년 1월 31일
0

openssl로 암호화 하기

-aes-256-cbc: 암호 이름(대칭 암호: AES; 블록에서 스트림으로의 변환: CBC(cipher block chaining))
-pass pass: 암호 지정(여기서는 P@ssw0rd라고 입력함. 생략하면 비밀번호를 직접 입력한다. )
-P: 사용된 솔트 키 및 IV를 출력 옵션
-in file: 입력 파일 옵션
-out file: 출력 파일 옵션
#openssl enc -aes-256-cbc -pass pass:P@ssw0rd -p -in <평문파일> -out <암호문파일>

openssl로 복호화 하기
-d: 복호화 옵션
-in file: 입력 파일
-out file: 출력 파일
-P: 사용된 솔트 키 및 IV를 출력 옵션

#openssl enc -aes-256-cbc -pass pass:P@ssw0rd -p -d -in <암호문파일> -out <평문파일>

실습> openssl로 암호화/복호화 하기

1. 파일 생성
[root@localhost ~]# cat << EOF > file.txt

> Hello openssl!
> Have a nice day!
> EOF

[root@localhost ~]# cat file.txt
Hello openssl!
Have a nice day!

2. 암호화 하기
생략 가능한 옵션: -pass pass:P@ssw0rd, -p
나머지 옵션: 모두 사용해야 한다.
[root@localhost ~]# openssl enc -aes-256-cbc -pass pass:P@ssw0rd -p -in file.txt -out file.txt.enc
salt=6064D5148AE3ABAD
key=16FB59AAD8A1749ECE6DEDE78E2994F489245240AD875CE9E4906EC2CDFB75BA
iv =88C6145D9B1FD4E5E6B796792E712868
[root@localhost ~]# ll
합계 8
-rw-r--r--. 1 root root 32 1월 31 17:26 file.txt
-rw-r--r--. 1 root root 64 1월 31 17:27 file.txt.enc
[root@localhost ~]# file *
file.txt: ASCII text
file.txt.enc: data

3. 복호화 하기
생략 가능한 옵션: -pass pass:P@ssw0rd, -p
나머지 옵션: 모두 사용해야 한다.
[root@localhost ~]# openssl enc -aes-256-cbc -pass pass:P@ssw0rd -p -d -in file.txt.enc -out file.txt.dec
salt=6064D5148AE3ABAD
key=16FB59AAD8A1749ECE6DEDE78E2994F489245240AD875CE9E4906EC2CDFB75BA
iv =88C6145D9B1FD4E5E6B796792E712868
[root@localhost ~]# file *
file.txt: ASCII text
file.txt.dec: ASCII text
file.txt.enc: data
[root@localhost ~]# ll file.txt file.txt.dec
-rw-r--r--. 1 root root 32 1월 31 17:26 file.txt
-rw-r--r--. 1 root root 32 1월 31 17:29 file.txt.dec
[root@localhost ~]# diff file.txt file.txt.dec

실습> OpenSSL을 이용한 RSA 사용하기

RSA: 공개키(비대칭키) 암호화 알고리즘

공개키 암호화 알고리즘은
개인키, 공개키 두 개의 키쌍을 이용해서 암호화/복호화를 한다.

개인키: 자신만 알고 절대로 공개되면 안되는 키
공개키: 누구에게나 공개되는 키

공개키로 암호화한 것은 개인키로 복호화 할 수 있다.
개인키로 암호화한 것은 공개키로 복호화 할 수 있다.

공개키는 암호화키 != 복호화키

보내는 사람(Alice)       공개된 환경                 받는 사람(Bob) 
Plaintext -> Encrypt ---> Ciphertext ---> Decrypt -> Plaintext
             Bob's                           Bob's 
             public key                      private key

평문(Plaintext)
-암호화 알고리즘을 통해서 암호화되기 전에 읽을 수 있는 문장
암호문(Ciphertext)
-암호화 알고리즘을 통해서 읽을 수 없는 문장
암호화 알고리즘(Encryption)
-암호화하는 과정을 말한다.
복호화 알고리즘(Decryption)
-복호화하는 과정을 말한다.

암호화: 평문을 암호문으로 바꾸는 과정을 말한다.
복호화: 암호문을 평문으로 바꾸는 과정을 말한다.

1. 공개키(비대칭키) 생성
genrsa 명령어를 이용해서 2048 bit 크기의 개인키를 생성한다.
좀더 강력하고 더 큰 키를 생성하려면 뒤에다 bit 수를 넣어주면 된다.

E.g. openssl genrsa -out private2_key.pem 8192
[root@localhost ~]# mkdir RSATEST; cd RSATEST
[root@localhost RSATEST]# openssl genrsa -out private_key.pem
[root@localhost RSATEST]# file private_key.pem
private_key.pem: PEM RSA private key

rsa 명령을 사용하여 개인키를 이용해서 공개키를 생성한다.
[root@localhost RSATEST]# openssl rsa -in private_key.pem -out public_key.pem -pubout
[root@localhost RSATEST]# file public_key.pem
public_key.pem: ASCII text

2. 파일 암호화
공개키로 암호화할 파일을 생성한다.
[root@localhost RSATEST]# cat << EOF > file.txt

> Hello OpenSSL RSA!
> - Linuxmaster.NET ^^* -
> EOF

[root@localhost RSATEST]# cat file.txt
Hello OpenSSL RSA!

[root@localhost RSATEST]# openssl rsautl -encrypt -inkey public_key.pem -in file.txt -pubin -out file.txt.enc

3. 파일 복호화
개인키를 사용해서 file.txt.enc 파일을 복호화 한다.
파일을 복호화할 때 개인키가 없으면 절대 풀 수 없다.
rsautl 명령에 사용되는 옵션
-decrypt: RSA 키로 입력 데이터를 복호화하는 옵션
-inkey private_key.pem: RSA 개인키 파일을 지정하는 옵션
-in file.txt.enc: RSA로 암호화된 암호문 파일을 지정하는 옵션
-out file2.txt: RSA로 복호화할 평문 파일을 지정하는 옵션

[root@localhost RSATEST]# openssl rsautl -decrypt -inkey private_key.pem -in file.txt.enc -out file2.txt
[root@localhost RSATEST]# cat file2.txt
Hello OpenSSL RSA!

파일이 같은지 확인한다.
[root@localhost RSATEST]# diff file.txt file2.txt
[root@localhost RSATEST]# ll file.txt file2.txt

-rw-r--r--. 1 root root 43  1월 31 20:00 file.txt
-rw-r--r--. 1 root root 43  1월 31 20:23 file2.txt

💥💥💥 중요!!! 공개키 암호 기술을 활용한 랜섬웨어 💥💥💥

주로 랜썸웨어는 공개키 암호기술을 활용한다. 최근에 사용하는 랜섬웨어가 사용하는 암호방식은 아래와 같다.

1. 랜섬웨어는 256비트 키를 갖는 <AES 암호 알고리즘>을 이용해 서버에 있는 파일들을 암호화한다.
2. <AES 암호키>는 다시 <RSA 공개키>를 이용해 암호화한다.
3. 암호화된 파일들을 복호화 하기 위해서는 <AES 암호키>가 있어야 하는 데 이 키는 블랙해커가 가지고 있는 <RSA 개인키>를 통해서만 가능하다.

실습> RSA 공개키 알고리즘 이해하기

1. 소개
비대칭키(공개키) 방식의 암호화 알고리즘중에서 RSA는 산업 표준으로 사용되고 있는 암호화 알고리즘이다.
RSA는 Rivest, Shamir, Adleman 3명의 성을 따서 만든 이름으로 RSA 라고 부른다.
SSH, SSL/TLS에서 사용중인 암호화 알고리즘이다.

2. 암호화/복호화

Alice                                     Bob
Plaintext -> Encrypt ---> Ciphertext ---> Decrypt -> Plaintext
             Bob's                        Bob's 
             public key                   private key

3. RSA 키쌍 생성하기
3-1. 두 개의 소수 p, q를 선택한다.
소수에 해당하는 두 개의 수를 구한다.
여기서는 p=5, q=11로 선택한다.

3-2. (p-1)(q-1)과 서로소인 정수 e를 선택한다.
(5-1)x(11-1)=4x10=40
e=7
40에 해당하는 서로소 7을 선택한다.
40과 서로소인 다른 어떤 수도 e의 값이 될 수 있다.
e의 값이 될 수 있는 값들: 3, 7, 11, 13, 17, 19 ...

3-3. 공개키를 구한다.
n=pq 를 계산한 후 공개키(n,e)를 구한다.
p=5, q=11이므로 n=pxq=5x11=55 가 되므로 n의 값은 55이다.
(n,e)=(55,7)이 되고 이게 바로 공개키가 된다.

3-4. 개인키를 구한다.
ed를 (p-1)(q-1)로 나눈 나머지가 1이 되도록 하는 d를 구한다.
d가 바로 개인키다.
pq=40, e=7이라고 할 때 여기서는 d=23을 선택한다.
d의 값이 될 수 있는 값들: 23, 63, 103, 103, 183, 223 ...

3-5. RSA 암호화
평문 메세지(m)을 공개키를 이용해서 RSA 방식으로 암호화한다.
암호화 형식: C = m^e mod n
평문 메세지 m=9 라고 할 때 m을 공개키로 암호화한 값은 4이다.
C = m^7 mod 55
C = 4782969 mod 55
C = 4

3-6. RSA 복호화
암호화된 메세지(C)를 개인키를 이용해서 RSA 방식으로 복호화한다.
복호화 형식: m = C^d mod n
개인키 23을 이용해서 암호문을 계산하면 9로 복호화 된다.
m = 4^23 mod 55
m = 70368744177664 mod 55
m = 9

profile
정보보안 전문가

0개의 댓글