1. Windows Client - SSH

◾ 공개키는 서버

개인키로 공개키가 풀리면 허용해주는 시스템

개인키가 있으면 공개키를 계산 가능

 

◾ SSH – Windows Client(putty)

: 공개키를 미리 저장하고 공개키를 이용한 인증방식이다.


◾ 과정
 1) 클라이언트에서 키생성.
 2) 공개키를 서버로 이전
 3) 패스워드 없는 접속 테스트

 

◾ puttygen – 키 생성 관리 프로그램
• 시작 – PuTTY(64bit)


키 생성

key 아래 빈 부분을 마우스로 문지르면 빠르게 키 생성 가능

키 확인

개인키 저장

다음 경로에 저장한다.

 

리눅스에서 복사한 공개 키는 서버의 $HOME/.ssh/authorized_keys에 저장한다.

[root@CentOS7 ~]# su - st
마지막 로그인: 금 12월 10 13:45:04 KST 2021 192.168.10.130에서 시작 일시 pts/0
[st@CentOS7 ~]$ pwd
/home/st
[st@CentOS7 ~]$ ls
[st@CentOS7 ~]$ mkdir .ssh
[st@CentOS7 ~]$ ls
[st@CentOS7 ~]$ ls -a
.   .Xauthority    .bash_logout   .bashrc  .config   .ssh
..  .bash_history  .bash_profile  .cache   .mozilla  .viminfo
[st@CentOS7 ~]$ vi .ssh/authorized_keys

OR

[root@CentOS7 ~]# mkdir /home/st/.ssh
[root@CentOS7 ~]# vi /home/st/.ssh/authorized_keys

 

Windows Putty어서 개인키를 지정하고 Windows Putty 접속 계정 지정한다.

PuTTY에서 아래와 같이 설정해준다.

 

서버에 접속해서 패스워드 없이 접속 되는지 확인한다.

자동으로 접속된다.

Using username "st".
Authenticating with public key "rsa-key-20220203"
Last login: Thu Feb  3 15:03:19 2022
[st@CentOS7 ~]$

2. Linux Client - SSH

공개키를 미리 저장하고 공개키를 이용한 인증방식이다.


◾ 과정
 1) 클라이언트에서 키생성.
 2) 공개키를 서버로 이전
 3) 패스워드 없는 접속 테스트

 

◾ 클라이언트에서 키 생성
# ssh-keygen -t <type> -b <bits>
  -t : rsa, dsa
  -b : rsa(768~2048), dsa(1024)


키 생성

[root@CentOS7 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:veO458NL5gkPHsRAHumf+DV5X9Ffhj/IcuK4MEvlGpI root@CentOS7
The key's randomart image is:
+---[RSA 2048]----+
|      o.         |
|     o..         |
|     .o        ..|
|      .o .    ..+|
|       oSo... .o+|
|      o.= ++.+ .+|
|     E *++Bo+. ..|
|      o.B%++  .  |
|       o+=Oo     |
+----[SHA256]-----+

 

공개키 : /root/.ssh/id_rsa.pub

개인키 : /root/.ssh/id_rsa

 

공개키를 접속할 서버로 복사한다.

[root@CentOS7 ~]# ssh-copy-id st04@192.168.10.11
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.10.11 (192.168.10.11)' can't be established.
ECDSA key fingerprint is SHA256:vrnjESYRqUdWJx0S182N+RYSd9mPESDSuJhKCLIqtqY.
ECDSA key fingerprint is MD5:68:07:84:35:e6:90:4c:7f:14:15:17:92:ff:a9:e9:13.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': y
Please type 'yes' or 'no': yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
st04@192.168.10.11's password:1234

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'st04@192.168.10.11'"
and check to make sure that only the key(s) you wanted were added.

 

ssh로  로그인이 가능하다.

[root@CentOS7 ~]# ssh st04@192.168.10.11
Last login: Thu Feb  3 15:44:09 2022 from 192.168.10.130

 

윈도우에서 접속하기위해 다음과 같이 설정한다.

개인키를 윈도우로 전송하기위해 ftp서버를 사용한다.

[root@CentOS7 ~]# yum install -y vsftpd

[root@CentOS7 ~]# systemctl start vsftpd

 

생성된 개인키를 ftp에서 접속할 계정의 홈디렉토리로 옮기고 권한을 변경한다.

[root@CentOS7 ~]# cd /root/.ssh
[root@CentOS7 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@CentOS7 .ssh]# cp id_rsa /home/st04/id_rsa
[root@CentOS7 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@CentOS7 .ssh]# cd /home/st04/id_rsa
-bash: cd: /home/st04/id_rsa: 디렉터리가 아닙니다
[root@CentOS7 .ssh]# cd /home/st04
[root@CentOS7 st04]# ls
id_rsa
[root@CentOS7 st04]# ll
합계 4
-rw------- 1 root root 1675  2월  3 15:56 id_rsa
[root@CentOS7 st04]# chmod 666 id_rsa
[root@CentOS7 st04]# ll
합계 4
-rw-rw-rw- 1 root root 1675  2월  3 15:56 id_rsa

 

윈도우 cmd에서 ftp 접속을 통해 get명령어로 id_rsa 파일을 다운받는다.

C:\Users\st04>ftp 192.168.11.131
192.168.11.131에 연결되었습니다.
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
사용자(192.168.11.131:(none)): st04
331 Please specify the password.
암호:
230 Login successful.
ftp> get id_rsa
200 PORT command successful. Consider using PASV.
550 Failed to open file.
ftp> get id_rsa
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for id_rsa (1675 bytes).
226 Transfer complete.
ftp: 0.00초 1675000.00KB/초
ftp>

 

Load로 id_rsa를 로드하고 따로 개인키를 저장한다.

저장한 개인키로 접속 설정한다.

 

자동 접속을 확인할 수 있다.

Using username "st04".
Authenticating with public key "imported-openssh-key"
Last login: Thu Feb  3 15:46:54 2022 from 192.168.10.130
[st04@dal ~]$

공개키 알고리즘
• 두 개의 다른 키 사용


공개키 : 모든 사람이 접근 가능한 키 (공개)

개인키 : 각 사용자 자신만이 소유 (비밀)


관용 암호에 사용되는 키는 비밀키라고 함


공개키 알고리즘의 특징
• 암호 알고리즘과 암호키를 알아도 복호키 계산 불가능
• 두 개의 키 중 하나는 암호에 다른 하나는 복호에 사용

 

1. 공개키와 개인키 생성
2. 공개키는 공개하고 개인키는 개인이 소유
3. A는 B의 공개키로 메시지를 암호화
4. B는 자신의 개인키로 메시지 복호화
(B의 개인키를 모르는 제 3자는 메시지 복호 불가능)

 

- 암호 사양
  암호알고리즘 : mod 7에서 곱셈
  공개키 : 3, 개인키 : 5
  원문 : 4

- 암호화
 4 * (3 mod 7) = 5 (암호문)

- 복호화
 5 * (5 mod 7) = 4 (원문)

>> mod 7 에서 3, 5는 서로 역원 (mod에서는 정수 내에 곱셈에 대한 역원이 존재한다.)

 

mod 소수에서는 잉여계가 다 나온다.

 

원문 : WE WISH YOU A MERRY CHRISTMAS AND A HAPPY NEW YEAR
 W E  W  I  S  H  Y  O  U  A  M  E  R  R  Y  C  H  R  I  S  T  M  A  S  A  N  D  A  H  A  P  P  Y  N  E  W  Y  E  A  R
23 5  23 9  19 8  25 15 21 1  13 5  18 18 25 3  8  18 9  19 20 13 1  19 1  14 4  1  8  1  16 16 25 14 5  23 25 5  1  18
4  25 4  8  21 3  14 1  31 5  28 25 16 16 14 15 3  16 8  21 26 28 5  21 5  33 20 5  3  5  6  6  14 33 25 4  14 25 5  16
D  Y  D  H  U  C  N  A  %  E  @  Y  P  P  N  O  C  P  H  U  Z  @  E  U  E  &  T  E  C  E  F  F  N  &  Y  D  N  Y  E  P
^암호

개인키 : 5
공개키 : 15

암호화 : (개인키*원문 키맵매칭 값) mod 37 = 암호문 값

암호 알고리즘 : mod37 에서 곱셈
공개키 : 15
키맵
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
0 A B C D E F G H I J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  !  @  #  $  %  ^  &  *  (  )

서명문 : DYDHUCNA%E@YPPNOCPHUZ@EUE&TECEFFN&YDNYEP

복호화 : (공개키*암호문 키맵매칭 값) mod 37 = 원문 값

 

▶ 공개키 암호의 기밀성

▶ 공개키를 이용한 인증 (부인 방지)

- 기밀 통신시 공개키로 암호화한다.

- 사용자 인증시 개인키로 암호화한다.

 

▶ 공개키를 이용한 기밀통신과 서명

▶ 공개키 암호 시스템의 사용
• 암호/복호 (수신자의 공개키로 메시지 암호)
• 디지털 서명 (송신자의 개인키로 메시지 서명)
• 키 교환 (세션키를 교환하기 위해 사용)

▶ 공개키 암호는 수학적인 난제를 이용 암호화를 수행한다.


▶ 소인수 분해의 어려움
• RSA


▶ 이산대수문제
• 엘가말(El Gamal)
• 디퍼헬만(Diffie-Hellman)
• 타원 곡선 (Elliptic Curve)

 

▶ 공개키 알고리즘의 조건 (Diffie와 Hellman)
• 키 쌍(공개키 KU, 개인키 KR)의 생성이 쉽다.
• 다음 식과 같은 암호문의 생성이 쉽다.

• 다음식과 같은 암호문의 복구화가 쉽다.

• 공개키 KUb로부터 개인키 KRb를 결정하는 것은 어렵다.
• 공개키 KUb와 암호문 C로부터 메시지 M의 복구가 어렵다.
• 암호와 복호 기능이 다음과 같이 적용 가능하다. (추가 사항)

 

▶ 공격 유형
• 전사적 공격에 취약
  → 키의 크기를 크게 함으로써 방지
(상대적으로 속도가 느려짐)
• 공개키로부터 개인키를 계산하는 방법
  → 수학적으로 계산이 불가능함을 증명하지 못함
• 가능한 메시지 공격
: 모든 가능한 메시지를 공개키로 암호화하여 암호문과 비교
  → 메시지에 임의의 비트를 추가함으로써 방지

 

▶ RSA의 개발
: 1977년에 개발되어 1978년에 공포 (Rivest, Shamir, Adleman)


▶ 알고리즘
• 평문은 블록으로 암호화
• 암호화

• 복호화

공개키 : KU = {e, n}, 개인키 : KR = { d, n }

 

▶ e,d,n 값 생성
• p, q 선택 : p와 q는 10¹ 정도의 소수
• n = p * q
• e : GCD(e, ф(n)) = 1인 값을 선택
• d : e * d = 1 mod ф(n) 인 값을 계산

 

▶ 복호화 과정의 증명

 

+ Recent posts