나의 IT일지
암호학 본문
암호화
암호화란 약속하고 있는 사람들끼리 통신하기 위한 기능으로, 통신하는 사람을 제외한 제 3자가 통신 내용을 확인하는 것을 막거나 주요 내용이 유출되더라도 해당 내용을 확인하지 못하게 막기 위해서 사용한다.
암호화는 계정, 비밀번호, 권한과 같은 보안을 담당하는 기능으로, 보안 3요소인 기밀성(제 3자 확인 불가), 무용성(위변조 차단), 가용성(통신 유지)를 가지고 있다.
암호화의 종류 | |
스테가노 그래피 | 다른 내용,매체(파일)에 원래 내용을 숨기는 암호화 (심층 암호화) |
전자 암호화 | 메세지 내용의 배열을 바꿔서 내용을 숨기는 암호화 |
환자 암호화 | 문자 배열을 밀어내서 내용을 숨기는 암호화 (시저스 암호) |
비제네르 암호화 | 특정 키워드를 이용해서 내용을 숨기는 암호화 |
에니그마 암호화 | 타자기의 특정 문자 신호를 다른 문자의 신호로 변화시켜 내용을 숨기는 암호화 |
평문을 암호문으로 만드는 것을 암호화라고 하며, 암호화를 하려면, 평문과 결합할 키, 평문을 암호화시킬 알고리즘이 필요하다.
반대로, 암호문을 평문으로 만드는 것을 복호화라고 한다. 이때, 복호화 하기 위해서는 복호화하기 위한 알고리즘과 키가 필요하다.
단방향 암호화
단방향 암호화란 암호화된 데이터를 다시 원래의 평문으로 복원하는 것이 불가능한 암호화 방식으로, 키를 사용하지 않고 암호화 과정이 진행 된다. 그래서 단방향 암호화는 복호화가 불가능하다.
- 알고리즘 : md5($1) , sha , sha2(=sha128, sha256, sha512)($6)
- sha512sum [파일 경로] : sha512 해시 알고리즘으로 해당 파일의 데이터를 해시 값으로 변환
- md5sum [파일 경로] : md5 해시 알고리즘으로 해당 파일의 데이터를 해시 값으로 변환
해당 알고리즘은 임의의 길이의 데이터를 고정된 길이의 해시 값으로 변환하는 함수로, 해당 함수를 통해 만들어진 암호문(해시)은 키로 사용하게 된다.
단방향 암호화는 파일 제목이 바뀌더라도 해시 암호가 변경되지 않지만 파일 내용이 변경되는 경우 해시가 변경된다. 그래서, 무결성을 증명할 때 해시 암호화를 사용하는 것이다.
양방향 암호화
양방향 암호화란 암호화된 데이터를 다시 원래의 평문으로 복원하는 것이 가능한 암호화 방식으로, 내용을 암호화 키를 통해 암호화시키며, 암호화 시킨 암호문을 복호화 키를 통해 복호화 하게 된다. 그래서, 양방향 암호화는 암호화시키기 위한 암호화 키와 복호화시키기 위한 복호화 키가 한 쌍으로 존재하게 된다.
대칭 암호화
암호화 키와 복호화 키를 동일하게 사용하는 암호화 방식으로, 클라이언트가 대칭키를 서버 측으로 전송하면 서버는 해당 대칭키를 암호화와 복호화에 사용하게 된다. 즉, 클라이언트는 대칭키로 데이터를 암호화해서 데이터 전송하며 서버도 클라이언트와 같은 대칭키로 데이터를 복호화 한다.
대칭 암호화의 키는 클라이언트와 서버가 같은 키를 사용하기 때문에, 클라이언트의 키와 서버의 키를 동기화를 하게 된다. 즉, 키 하나를 통해 통신 내용을 암호화, 복호화가 진행된다. 그래서 키가 유출될 경우, 암호화의 기능이 상실하게 된다.
- 스트림 암호화 : 입력 순서대로 암호화를 수행하는 방식 → 동영상 암호화에서 사용
- 알고리즘 : RC4, RC5
- 블록 암호화 : 데이터를 나누어서 암호화를 수향하는 방식 → 파일 암호화에서 사용
- 알고리즘 : DES, 3DES, AES
DES
평문을 64bit 단위로 나눈 뒤에 키를 이용해서 64bit의 암호문을 만드는 대칭형 블록 암호화 알고리즘으로, 16번의 반복된 암호화(16 라운드)를 통해 암호문이 생성된다. 이때. 대칭 암호화를 통해 생성되는 암호문의 크기는 일정하게 된다. 그래서 주로 통신을 목적으로 사용한다.
이때, 라운드 키 생성 함수와 56bit의 키를 통해 각 라운드마다 사용할 48bit로 구성된 라운드 키 16개를 생성한다.
- block 크기 : 64bit (= 8byte)
- 대칭 키의 크기 : 56bit
- 블록 1byte당 1bit 의 패리티(오류검사) 비트 발생
- 라운드 키의 크기 : 48bit
Feistel 구조 |
블록 암호화에서 암호화가 진행되는 횟수로, Feistel 구조를 바탕으로 라운드를 진행한다. 이때, Feistel구조란 데이터를 두 부분으로 나누어 좌, 우 교대로 비선형 변환을 적용시키는 구조로, 치환, 순열, xor를 사용한다.
|
3DES
DES를 3번 반복하여 암호문을 만드는 대칭형 블록 암호화 알고리즘으로, 각 DES에서 사용하는 키는 서로 다른 키를 사용한다.
3DES의 순서는 암호화-복호화-암호화로, 첫 번째 키로 평문을 DES 암호화를 하게 된다. 그 다음에 두 번째 키를 통해 DES 복호화가 진행되고 마자막으로 세 번째 키를 통해 복호화한 문서를 DES암호화 하게 된다.
- block 크기 : 64bit (= 8byte)
- 대칭 키의 크기 : 168bit (= 56*3 bit)
- 블록 1byte당 1bit 의 패리티(오류검사) 비트 발생
- 라운드 키의 크기 : 48bit
AES
DES의 라운드 횟수를 조절해서 암호화 할 수 있는 대칭형 블록 암호화 알고리즘으로, 고정적으로 16라운드를 수행하는 암호화 방식이 아닌 라운드 횟수를 결정해서 수행하는 SPN구조(병렬레이어구조)를 사용한다. 즉, AES는 기존의 라운드를 연결하는 방식을 사용한다.
- block 크기 : 128bit
- 대칭 키의 크기 : 128bit or 192bit or 256bit
비대칭 암호화
암호화 키와 복호화 키를 다른 키로 사용하는 암호화 방식으로, 클라이언트와 서버가 사용하는 암호화 키와 복호화 키는 서로 다르다.
비대칭 암호화는 두 개의 키중 하나를 상대방에게 공개하는 공개키로 교환이 진행되고, 나머지 하나를 자신만 사용하는 개인키로 사용한다. 즉, 키 교환 프로토콜을 통해 클라이언트가 공개 키를 서버 측으로 전송하고 서버는 자신의 공개 키를 클라이언트에게 전송한다.
보통 유출되어도 통신 내용을 확인 할 수 없는 암호화 키를 공개 키로 결정한다. 하지만 복호화 키를 공개 키로 결정하는 경우가 있는데, 복호화 키가 유출되면, 통신 내용을 확인 할 수 있기 때문에, 신뢰할 수 있는 국가 기관과의 통신만 사용한다.
- 암호화 키를 공개키로 사용 (공개키 암호화 방식) : 데이터를 안전하게 전송
- 복호화 키를 공개키로 사용 (개인키 암호화 방식) : 신뢰할 수 있는 단체와의 데이터 전송
이러한 비대칭 암호화는 키 동기화에 대한 안정성을 향상시키고, 인증서를 사용하기에 기밀성을 보장하며, 부인 방지를 통해 무결성을 보장한다. 하지만 알고리즘이 복잡한 만큼 암호화, 복호화의 처리속도가 느리며, 인증서를 사용하지 않는 비대칭 암호화는 암호화 MITM공격에 취약하다.
암호화 MITM 공격 |
공개키 교환 중에 공격자가 끼어드는 중간자 공격으로, 공개키 교환 과정에서 공격자는 전송되는 공개키를 가로채고 자신의 공개키를 대신 전송한다. 이때, 대상자가 해커에게 패킷을 보낼 수 있도록, 목적지 IP주소를 스푸핑되어 있어야 한다. 공격자의 공개키를 받은 대상자들은 서로에게 패킷을 전송하게 되는데, 받은 공개키를 통해 암호화를 하고 스푸핑된 목적지 IP주소에 따라 공격자에게 패킷를 전송하게 된다. 그리고 공격자는 해당 패킷의 내용을 복호화를 통해 패킷의 내용을 확인, 조작할 수 있으며, 원래 전송하려는 대상자의 공개키를 통해 다시 암호화를 해서 패킷을 전송한다. |
비대칭 암호화 알고리즘
- RSA
- 소인수 분해 기반으로 구성된 알고리즘
- 가장 많이 사용하는 비대칭 암호화 알고리즘
- 키 길이 : 1024 ~ 2048 byte 사이에서 랜덤으로 설정 (동적 키 사용)
- 키 길이는 무작위로 변경되지만, 암호문의 길이는 일정
- DSA
- 이산대수(난수) 기반으로 구성된 알고리즘
- 키 길이가 일정하지 않기에, 암호문의 길이도 랜덤
- 인증이 상황에 따라 속도가 달라지기에 통신이 불규칙
ECC 알고리즘 |
타원 곡선 암호화 알고리즘으로, 타원 곡선 함수를 사용해서 만든 공개키 암호 방식이다. ECC 알고리즘은 다른 알고리즘에 응용되서 함께 사용되는데, 주로 기존의 비대칭 암호화 방식에서 한번더 인증을 복잡하게 만드는 역할을 한다. |
하이브리드 암호화
대칭형 암호화와 비대칭형 암호화를 혼합시킨 암호화 방식으로, 비대칭 형식으로 교환한 임의값과 공개 키를 통해 생성한 비밀키로 대칭 형식 통신을 한다.
하이브리드 암호화는 서버와 클라이언트의 임의의 값을 서로 교환하여 공개키를 비밀키로 변경시키며, 해당 비밀키를 동기화 시킨다. 이러한 키 동기화 방식을 key-wrapping방식이라고 하는데, 서버와 클라이언트는 비밀키 생성 알고리즘을 바탕으로 임시 값을 통해 같은 비밀키를 가지도록 생성한다.
이러한 하이브리드 암호화는 비밀키를 생성하기 위해서 서로의 임시값을 전달하며, 알고리즘을 통해 같은 비밀 키를 생성되기에, 비대칭 암호화로 임시값을 전달하기에 키 동기화에 대한 안정성이 있으며, 대칭 암호화로 통신하기에 빠른 처리속도를 갖는다.
하이브리드 암호화 알고리즘
- Diffie-Hellman 동기화 방식
- 임의의 값을 교환하고 생성된 비밀키를 동기화하는 방식
- 이산대수(난수) 기반으로 구성된 알고리즘
- 순서
- 임의의 값 교환 및 동기화 (소수값 : P, 초기값 : G)
- 클라이언트와 서버에 각 개인키와 공개키 생성 (개인키 : A, 공개키 : B = G^A mod P)
- 각 공개키를 전송
- 전송받은 공개키와 자신의 개인키를 통해 비밀키 생성 (비밀 키 : S = 개인키^전송 공개키 mod P)
- 비밀 키 교환후, 동기화
'정보보안' 카테고리의 다른 글
FTP서버 (0) | 2023.07.19 |
---|---|
telnet 서버와 xinet (0) | 2023.07.19 |
스왑과 쿼터 (0) | 2023.07.10 |
윈도우 설치 및 보안 정책 (0) | 2023.07.05 |
네트워크 공격 (0) | 2023.07.05 |