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 ~]$

전자서명

▶ 배경
종이 문서 사회에서 정보화 사회로의 진전으로 다양한 서비스 요구
데이터 무결성 , 사용자 인증, 부인방지 서비스가 필수적

 

목적
신뢰성 확보 ( 내용의 위·변조 및 신분 확인에 사용)

전자서명 = 사용자 인증 + 메시지 인증

▶ 전자문서의 문제점
• 위,변조가 용이 : 무결성
• 문서작성 사실 입증 곤란 : 부인방지

 

▶ 전자상거래의 문제점
• 거래상대방의 신원확인 곤란 : 사용자 인증
• 전송 내용의 비밀 유지 곤란 : 기밀성

 

▶전자서명으로 알 수 있는 사항

• 서명자 신원확인(User Authentication)
  - 개인키의 소유자가 전자서명 행위자임을 증명
  - 서명자 고유의 표식

• 위조 불가(Not forgeable)
  - 합법적인 서명자 외에는 전자서명 생성 불가 증명

• 변경 불가(Unalterable)
  - 서명한 문서의 내용과 서명의 변경 불가 증명

• 부인 불가(Non-Repudiation)
- 서명은 본인 이외에는 불가능함을 증명

• 재사용 불가(Not Reuseable)
  - 다른 전자문서의 서명으로 사용 불가능함을 증명

 

암호화 방법과 전자서명

전자서명은 전자서명의 조건을 만족하면서 서명방식과 검증 방식이 명확하여야 함


▶ 대칭키 암호 알고리즘에 의한 방법
• 중재된 서명기법
• 서명과 검증을 제 3자에 의해서 행할 수 밖에 없음


▶ 공개키 암호 알고리즘에 의한 방법
• 메시지 복원형 전자서명 방식
• 문서 자체를 이용하는 서명방식
• 메시지 부가형 전자서명 방식
• 문서에 서명메세지를 포함하는 방식

 

공개키 이용 전자서명

공개키 : A의 인감 증명서

개인키 : A의 인감

* 전자서명 : A의 개인크로 데이터의 전자서명 생성, A의 공개키로 전자서명 검증

- 평문(메시지 다이제스트) + 개인키 = 암호문(전자서명)

- 암호문(전자서명) + 공개키 = 평문(다이제스트)

1. 송신자는 보낼 메시지를 해시함수로 다이제스트를 생성한다.

2. 다이제스트와 송신자의 개인키로 암호화한다.

3. 메시지와 서명을 같이 송신한다.

4. 수신받은 서명을 송신자의 공개키로 복호화해 다이제스트를 생성한다.

5. 수신받은 메시지를 해시함수를 통해 다이제스트를 생성한다.

6. 서명을 복호화해 얻은 다이제스트와 메시지를 해시함수를 통해 얻은 다이제스트를 비교한다.

   → 비교해서 같으면 신뢰할 수 있고, 다르면 거래의 신뢰성을 확보할 수 없다.

 

※ 사용자와 메시지 인증은 가능하지만 기밀성 보장이 안된다.

※ 개인키를 잃어버리면 자신이 책임져야 한다.

 

전자서명의 이용 : 전자봉투 (원타임 비밀키)

1. 송신자는 메시지와 암호화하기 위해 난수를 발생해 비밀키를 생성한다.

2. 메시지를 비밀키로 암호화해 암호메시지를 만든다.

3. 비밀키를 수신자의 공개키로 암호화한다.

4. 암호메시지와 공개키로 암호화한 비밀키를 디지털봉투에 담아 전송한다.

5. 수신자는 디지털 봉투에 있는 암호화된 비밀키를 수신자의 개인키로 복호화해 비밀키를 얻는다.

6. 암호화된 메시지를 비밀키로 복호화한다.

 

※ 사용할 때마다 난수를 발생시켜 비밀키로 정한다. 받는 사람의 공개키로 이 비밀키를 암호화한다. 

※ 기밀성이 가능하지만 인증은 불가능하다.

※ 네트워크에서 빠르게 사용 가능하다.

 

공개키와 대칭키를 이용한 전자서명

공개키를 이용한 전자서명으로 사용자 인증이 가능하다.

대칭키를 이용한 전자서명으로 기밀성이 가능하다.

※ 인증과 기밀성이 가능하다.

 

▶ PKI(Public Key Infrastricture) 구성 요소

- 공개키 소유자 증명

- 인증서는 인감증명서에 해당한다. → 기밀성, 무결성, 인증

인증서

 

▶ 인증서의 정의

- 공개키 소유자 증명

- 인증서라 함은 개인키와 이에 합치하는 공개키에 대하여 이를 소유하는 자연인 또는 법인과의 귀속관계 등을 인증기관이 자신의 개인키로 전자서명하여 확인, 증명하는 전자적 정보

▶ 인증서 : X.509

• 1K바이트 정도의 바이너리 데이터
• RFC 2459(X.509 ver. 3)

 

인증서 항목
• 서명전 인증서
  - tbsCertificate(to be signed certificate)
  - 확장항목 이외의 항목 필수
• 서명 알고리즘
  - 메시지 다이제스트 알고리즘(MD2,MD5..)
  - 공개키 암호 알고리즘
• 인증기관
  - 서명전 인증서 부분을 입력으로 해서 서명
  - 인증기관의 개인키와 인증서로 기재한 알고리즘 이용

 

▶ 인증서 발행과 이용

인증서를 발행하기 위해서는 공개키의 소유주는 인증기관에 공개키를 등록하고 인증기관은 등록된 개인의 공개키를 자신의 개인키로 서명해서 인증서를 발행한다.

▶ 인증 기관과 CRL

• CA (Certificate Authority) : 인증서 발행기관
• RA (Registration Authorities) : 인증서 유저 등록 기관

 

 

• CRL (Certificate Revocation List) : 인증서 폐지 목록

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


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

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


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


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

 

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) 인 값을 계산

 

▶ 복호화 과정의 증명

 

▷ 암호 개념

통신 당사자들끼리만 아는 비밀스러운 신호나 부호
암호화와 복호화하기 위한 원리, 수단, 방법 등을 취급하는 기술이나 과학

암호 시스템에서 기밀성, 무결성 확인

** plain text : 주고받는 메시지

- 암호 알고르즘, 복호 알고리즘은 같은 것을 사용한다. 

- 문제가 없는 알고리즘만 사용한다.

- 메시지를 보낼 때 평문으로 보내든 암호문으로 보내든 속도 저하가 없다.

 

평문을 암호화하기 위한 연산자의 유형

• 치환 (Substitution) : 평문의 각 원소를 다른 원소로 사상
• 전치 (Transpostion) : 평문의 각 원소를 재배열 (글자 재배열)
• 혼합 (Confusion) : 평문의 원소를 치환 선택(bit) (치환, 전치 혼합 사용)
• 확산 (Duffusion) : 평문의 원소를 확대(bit) (비트 수 확대)

 

사용된 키의 수

 대칭키 

: 송수신자가 같은 키를 사용

대칭키 : 암호키 = 복호키

키를 나눠가져야 해서 만나서 키를 나눠가져야 한다.

 

• 공개키 

: 송수신자가 다른 키를 사용

공개키 : 암호키 ≠ 복호키

공개키와 개인키가 있어야 암호화, 복호화를 할 수 있다.

송신자와 수신자가 각각 자신만의 공개키와 개인키를 만든다.

네트워크상에 공개키만 공개한다.

송신자는 수신자의 공개키를 가져와 암호화해 암호문을 수신자에게 보낸다. 

수신자는 수신된 암호문을 자신의 개인키로 복호화한다.

  * 단점은 너무 느림.

 

평문 처리 방법

• 블록 암호화 (Block cipher) : 연산을 블록단위로 처리
• 스트림 암호화 (Stream cipher) : 입력을 연속적으로 처리

 

 

▷ 암호 원리

단대단 암호 (End-to-End Encryption)

• OSI 참조모델에서 가장 높은 계층(7,6)에서 이루어진다.
• 네트워크에서 보안유지에 실패하더라도 데이터의 비밀성은 위협받지 않는다.
• 암호화는 송수신 프로세서가 담당한다.


링크 암호 (Link Encyption)

• OSI 참조모델에서 가장 낮은 계층(1,2)에서 암호화된다.
• 송수신 호스트나 중간 노드에서 노출된다.
• 신뢰적인 호스트 사이에 비신뢰적인 매체를 사용할 때 유리하다.
• 암호화는 송수신 호스트에서 담당한다.

• 유선 전화에서 음성을 암호화할 경우 사용한다.

 

** 단대단 암호와 링크 암호는 사용용도만 다르다.

 

관용 암호 ( = 대칭키 암호 )

• 암호/복호에 동일한 키 와 동일한 알고리즘 사용
• 수신자와 송신자는 키를 교환해야 함
• 공유한 키(비밀키)는 비밀로 유지
• 키 분배의 어려움
• 디지털 서명 불가능
• 속도가 빠름


공개키 암호

• 암호/복호에 각각 서로 다른 키 와 동일한 알고리즘 사용
• 수신자와 송신자는 연관된 키쌍 중 하나를 알아야 함
• 키 쌍중 하나(개인키)를 비밀로 유지
• 공개키를 공개
• 디지털 서명 가능
• 속도가 느림

 

 

고전적 암호 기술 (손으로 하는 암호 기법)

암호 방법
• 다양한 원문의 변환에 의해 외부인이 그 의미를 알지 못하도록 메시지를 변형
• 치환, 전치를 이용 원문을 숨김

 

1) Steganograhpy

: 메시지를 특정 메시지 위치에 숨기는 방법

특징

• 전송 내용을 숨기는 방법

• 메시지의 존재 자체를 은폐
• 원문 내의 단어나 문자를 적당히 배열 함으로써 실제 메시지를 나타냄

 

예제

• 문자 마킹 (Character marking)
  - 원문의 문자에 연필로 덧써서 표시를 해 빛을 적당한 각도로 비춰어야만 보임
• 보이지 않는 잉크 (Invisible ink)
  - 종이에 열이나 화학 처리를 해야만 보이는 잉크를 사용
• 핀 구멍 (Pin punctures)
  - 빛을 비춰야만 보이는 작은 구멍을 원문에 넣는 방법

 

Steganography의 장점

• 생성이 쉽다.


Steganography의 단점

• 상대적으로 적은 정보 비트를 은닉하는데 많은 오버헤드 요구
• 방법 노출 시 재사용 불가능
• 비밀통신에 대한 사실이 발견되면 타인에 의해 이용될 수 있다.

• 위치만 알고 있으면 확인 가능


최근 경향

• 동영상, 이미지 파일을 이용 원문을 숨기는 방법이 인터넷 등의 네트워크에서 이용됨
• 테러, 범죄에 이용되는 경우가 나타남

 

+ Recent posts