Search

Cryptography

소프트웨어 보안을 위한 암호학

1. 정보보호와 암호

정보보호: 데이터 기밀성, 무결성, 인증, 부인방지 등 보안 목표 달성 위한 기술.
암호의 역할: 데이터 전송/저장 시 기밀성·무결성 확보, 분석 방해, 해킹 저항성 제공.
인코딩 vs 암호화:
인코딩: 데이터 형식 변환(가독성, 저장/전송 용이성 목적, ex: Base64)
암호화: 키 기반 변환, 복호화 없이는 의미 해석 불가

2. 컴퓨터 데이터와 인코딩

모든 데이터 = 숫자
문자→숫자(아스키코드, 유니코드)
텍스트는 바이너리의 부분집합
hexdump:
바이너리 데이터의 16진수 표현

3. 암호의 분류

고전암호: Caesar Cipher, Vigenere Cipher 등
현대 대칭키 암호: AES 등(키 공유, 고속)
현대 공개키(비대칭키) 암호: RSA 등(서로 다른 키, 느리지만 키교환·전자서명 가능)

4. 고전암호 원리

치환(Substitution) 암호:
약속된 테이블 기반 문자 치환(예: Caesar, Vigenere)
Base64는 인코딩, 고전암호는 암호화
전치(Transposition) 암호:
문자 순서만 변경
Vigenere 암호:
반복적 키를 사용하는 치환 암호
고전암호의 취약점:
Frequency Analysis(빈도분석)로 쉽게 해독 가능
알파벳 ‘E’ 등 자주 쓰이는 문자의 빈도 활용

5. XOR 연산

XOR (eXclusive OR):
프로그래밍: ^ 연산자
특성:
A ^ B ^ B = A (복원 가능)
Carry propagation(덧셈·뺄셈의 자리올림) 없음
비트단위 연산(연산 중 비트수 불변)
XOR은 인코딩/암호화 기반 연산

6. 해싱(Hashing)

정의:
임의 길이 데이터를 고정 길이 데이터로 변환하는 단방향 함수
N:1 매핑, 단방향(역변환 불가)
예시 알고리즘:
CRC(비암호학적), MD5, SHA1, SHA256(암호학적)
활용:
데이터 무결성 검사, 파일 ID, 암호 저장, 전자서명
좋은 해시 조건:
Collision 없음(충돌저항성), Avalanche Effect(입력 미세변화→출력 완전달라짐), Preimage Resistance(역함수 불가), 빠른 연산속도
공격:
브루트포스, 암호학적 공격

7. 해시 보안 속성

Avalanche Effect:
입력이 조금만 바뀌어도 출력값이 완전히 달라지는 성질
Collision Resistance:
서로 다른 입력에 대해 동일 출력값(충돌) 찾기 계산상 불가능
Preimage Resistance:
해시값만 보고 원래 입력을 찾는 것(역산) 계산상 불가능

8. 대칭키 암호와 AES

대칭키 암호:
암호화/복호화 동일 키 사용(키 공유 필요)
AES(Advanced Encryption Standard): 대표적 대칭키 알고리즘
Key size: 128/192/256bit
Block size: 128bit 고정
IV(초기화 벡터): 블록 암호 모드(CBC, CFB 등)에서 사용, Block size와 같음
블록암호 모드: ECB(단순), CBC(체이닝) 등

9. 비대칭키 암호와 RSA

비대칭키(공개키) 암호:
암호화와 복호화에 서로 다른 키(공개키/개인키) 사용
RSA(Rivest–Shamir–Adleman): 큰 수 소인수분해 어려움 기반
활용:
키교환, 전자서명, 인증서 발급 등

10. 키교환 프로토콜: 디피-헬만(Diffie-Hellman)

공개 파라미터: 큰 소수 P, 정수 G
개인키: 임의의 정수 a, b (각자 생성)
공개키 계산: A = G^a mod P, B = G^b mod P
공개키 교환 후, 공유키 계산:
Alice: K = B^a mod P
Bob: K = A^b mod P
보안: 이산 로그 문제(Discrete Logarithm Problem)의 어려움에 기반

11. 인증서와 전자서명

공인인증서:
CA(Certificate Authority, 신뢰기관)가 발급
사용자 정보, 공개키, CA서명 포함
전자서명:
데이터 해시값을 개인키로 암호화(서명)
검증자는 공개키로 복호화한 해시값과 데이터 해시를 비교
소유권·무결성·부인방지 제공

12. SSL 암호화 통신 구조

공개키 기반 인증서 교환
키 교환 후, 대칭키(AES 등)로 본 데이터 암호화
이유:
비대칭키 암호는 느림, 대칭키 암호는 빠름
OpenSSL 등 라이브러리 사용
Base64 인코딩:
인증서, 키 등 바이너리 데이터를 텍스트로 안전하게 전달하기 위한 인코딩