- 암호학
- 보안의 3요소
- 제공 기능
- 고대 암호
- 현대 암호
- 대칭키
- 비대칭키
- 해시
- PKI
- 전자서명
- SSH
- Password 기반 인증
- Key 기반 인증
📗 암호학
📃 보안의 3요소
- 기밀성 Confidentiality
: 인가된 사용자만 허용된 데이터에 접근 (아무도 몰라야)
ex. 방화벽, 암호 ...
- 무결성 Integrity
: 적법한 사용자에 의해 해당되는 데이터가 적법하게 변경 (알고는 있지만 조작을 못하게)
- 가용성 Availability
: 필요할 때 데이터에 접근 가능
ex. 백업
📃 암호학 제공 기능
- 기밀성
- 인증
- 부인방지
- 무결성
🟠🟡 용어
- Plain Text : 평문
- Cipher Text : 암호문
- Key : 키
- 암호화 : 평문 ➡️ 암호문
- 복호화 : 암호문 ➡️ 평문
📃 고대 암호
- 스키테일
: 원통에 천을 감싸서 글을 작성한 뒤, 풀어서 전달 > 같은 지름의 원통에 다시 감아 해석
- 카이사르(시저) 암호
: 3글자씩 밀어서 치환
- 치환 암호
: key 기반으로 치환 (key 가능 개수 : 26!-1)
- enigma
📃 현대 암호
치환, 전치를 얼마나 어렵게 만드는가?
1. 대칭키 (Symmetric, Secret Key) : 암호화 키 = 복호화 키
- 기밀성 제공
- 알고리즘
- RC4
- DES(Data Encription System) => 취약점 발견 --- 사용 x
- AES => 가장 많이 사용
- SEED => 우리나라 제작
- 장점 : 빠른 속도
- 단점 : 키 분배의 문제 (키를 안전하게 전달할 수 있는가 & 키 개수가 너무 많음)
2. 비대칭키/공개키 (Asymmetric) : 암호화 키 ≠ 복호화 키
- Key Pair
- Public Key : 공개키 (공개무관)
- Private Key : 비공개키, 개인키 (공개되면 x like 대칭키) (ex. ssh key-gen)
- A가 B에게 암호문 전달할 때
(B의) 공개키로 암호화 ➡️ (B의) 개인키로만 복호화 : 기밀성
(A의) 개인키로 암호화 ➡️ (A의) 공개키로만 복호화 : 부인방지
- 알고리즘
- Diffie-Hellman
- RSA
- DSA
- ECC
- 장점 : 키 분배의 문제 해결
- 단점 : 느린 속도
3. 해시 Hash Function (Algorithm), One Way Function (단방향 함수), Message Digest (메세지 축약)
- 무결성 제공
** 키가 없음 즉, 입력 값이 같으면 출력 값도 동일
- input은 길이 제한이 없지만 output(hash value)는 길이가 고정됨
∴ 데이터 암호화 목적으로 사용하는게 아니라 무결성을 지키기 위해 사용
- 알고리즘
- MDS
- SHA1
- SHA2 (sha256, 512)
- SHA3
- 문제점 : Birthday Paradox (사람이 많아질 수록 생일 같은 경우가 많아짐)
4. PKI (Public Key Infrastructure)
인증서 개념 등장
- 공개키 방식은 상대방의 공개키를 검증할 수 있는 방법이 x
==> 제 3자 (CA)가 공개키(인증서) 검증을 대신하기 위해 PKI 등장
- 구조
- 인증서 x.509 표준
5. 전자서명
- 부인방지 제공
📘 SSH
- /etc/ssh/<Key_Pair> : 서버의 key pair (public, private)
- /etc/ssh/ssh_config : 클라이언트 설정 파일
- /etc/ssh/sshd_config : 서버 설정 파일
PasswordAuthentication no #PW 인증
GSSAPIAuthentication yes #key 인증
- ~/.ssh/<Key_Pair> : 클라이언트의 key pair
- ~/.ssh/know_hosts : 접속 기록
- ~/.ssh/authorized_keys : 공개키 저장
- ~/.ssh/config : ssh client의 설정파일 > 미리 등록해놓으면 쉽게 접속 가능
🔎 Password 기반의 인증
A (Client) --> SSH --> B (Server)
1. A는 B의 공개키가 필요
=> B의 공개키는 /etc/ssh/ssh_host_<알고리즘>_key(.pub) 에 있음
알고리즘 : RSA, DSA, ECDSA
2. (B 시스템에 최초 접속시) A 시스템의 사용자에게 B의 공개키(지문)가 맞는지 확인 (y/n)
3. A의 ~/.ssh/known_hosts 파일에 B의 공개키 등록
IP/domain 정보
B의 공개키
4. ID/PW (인증)
🔎 Key 기반의 인증
1. A에서 (인증키) key-pair 생성
ssh key-gen
~/.ssh/id_rsa : 개인키
~/.ssh/id_rsa.pub : 공개키
2. B에 A의 공개키 등록
B 시스템의 ~/.ssh/authorized_keys : client의 공개키 등록
EC2(클라우드 인스턴스) : A에서 지정한 A의 공개키 등록
BM,VM : ssh-copy-id 명령으로 등록 (* B에 패스워드 인증 방법이 활성화 되어 있어야함)
3. (B 시스템에 최초 접속시) A 시스템의 사용자에게 B의 공개키(지문)가 맞는지 확인 (y/n)
4. A의 ~/.ssh/known_hosts 파일에 B의 공개키 등록
IP/domain 정보
B의 공개키
5. A의 개인키로 인증
* 기본 로그인 사용자
- Amazon Linux : ec2 user
- Ubuntu : ubuntu
- Debian : debian
- Centos : centos
- RHEL : cloud-user
- Vagrant : vagrant
- 서버의 ssh 공개키 지문 확인
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
- 서버의 ssh 공개키 미리 확인하는 방법
ssh-keyscan <확인하고자 하는 ip>
ssh-keyscan -t <rsa|ecdsa> <ip>
- 공개키와 지문 확인
ssh-keyscan -t ecdsa <ip> | ssh-keygen -l -r
- 미리 서버의 공개키 등록
ssh-keyscan -t ecdsa <ip> >>
~/.ssh/known_hosts
🔎 Key 기반 인증 구성
client
ssh-keygen
ssh-keyscan -t ecdsa 192.168.100.11 >>
~/.ssh/known_hosts
ssh-keyscan -t ecdsa 192.168.100.12 >>
~/.ssh/known_hosts
or
ssh-copy-id vagrant@192.168.100.11
ssh-copy-id vagrant@192.168.100.12
'IT' 카테고리의 다른 글
PowerShell (0) | 2024.08.01 |
---|---|
[Pycharm] 파일경로 설정으로 인한 오류 (0) | 2023.11.12 |