정보보호
정보보호
- 정보의 수집, 가공, 저장, 검색, 송신, 수신 중에 정보의 훼손, 변조, 유출 등을 방지하기 위한 관리적, 기술적 수단 또는 그러한 수단으로 이루어지는 행위
- 보안과 가용성의 균형감을 유지하는 것
보안 : 가치 있는 유형과 무형 자산을 도난, 소실, 유출로부터 보호하는 것
보호 : 위협으로부터 안전한 정도, 정보를 저장하거나 유통하는 전반적인 시스템의 약점
Security Service(정보보호를 위한 기능)
1. 기밀성(Confidentiality)
2. 무결성(Identity) : 불법적으로 변경된 것은 없는지
3. 사용자 인증(User Authentication) : A가 보낸 게 맞는지
4. 부인 봉쇄(Non-Repudiation)
- 송신부인봉쇄
- 수신부인봉쇄
5. 가용성(Availability) : 해킹을 당해 멈추는 현상을 방지해야 함
6. 접근제어(Access Control)
1~4는 네트워크단 => 암호 기술로 해결 가능
5, 6은 서버 관리자 또는 개인이 중요 => 시스템 보안 기술로 해결 가능
사회공학적 공격
- 사람의 심리적인 취약점을 활용하여 정보를 취득하거나 접근권한을 얻거나 정보제공을 재정적 이득과 연결하여 시스템을 공격하는 방법
E[M] = C, D[C] = M
M : 평문, E : 암호 알고리즘, D : 복호 알고리즘, C : 암호문
Ke : encryption key, Kd : decryption key
대칭키(관용) 암호방식 : Ke = Kd
비대칭키(공개키) 암호방식 : Ke != Kd
하이브리드 암호방식 : 관용 암호방식 + 공개키 암호방식
시저 알고리즘
- shift 이용
- 알파벳이 26개이므로 25번만 공격해보면 찾을 수 있음
- 관용암호방식, 대칭키 암호방식
알파벳을 랜덤으로 대치하는 경우
- 26!의 경우의 수
1. 대치(Substitution)
- BOY -> CPZ : B를 C로, O를 P로, Y를 Z로 대치
- 평문이 그대로 나타남
2. 치환(Transposition)
- BOY -> OYB : 순서를 바꿈
- 평문이 나타날수도 / 안나타날수도
bit 단위로 handling 하는 곳에서도 대치, 치환을 반복적으로 사용해 암호화한다. (관용암호방식의 특징)
일방향 해시함수
- 문서의 무결성 점검
메시지 인증코드
- 메시지가 생각했던 통신 상대로부터 온 것임을 확인하는 코드
디지털 서명
- 거짓 행세, 변경, 부인 같은 위협을 방지하는 기술
부인
- 통신 사실을 나중에 아니라고 하는 것
보안위협 | 위협 받는 특성 | 방지를 위한 암호기술 |
도청 | 기밀성 | 대칭암호, 공개키암호 |
메시지 변경 | 무결성 | 대칭암호, 공개키암호, 일방향 해시함수, 메시지 인증코드, 디지털 서명 |
위장 | 인증 | 대칭암호, 공개키암호, 메시지 인증코드, 디지털 서명 |
부인 | 부인봉쇄 | 디지털 서명 |
크립토그래피 : 메시지의 내용을 읽지 못하게 하는 기법
스테가노그래피
- 메시지의 존재 자체를 숨기는 기법
- 디지털 워터마킹에 사용 (디지털 문서의 그림에 몰래 데이터를 숨겨놓고 이를 기반으로 저작권 확인)
일회용 패드(one time pad)
- 절대 해독되지 않는 알고리즘, 현실에서의 사용은 적합하지 않다.
- 평문과 랜덤한 비트열과의 XOR만을 취하는 단순한 암호
- 문자열이 복호화 되었다고 해도, 그것이 바른 평문인지 판정할 수 없다.
- 사용되지 않는 이유
- 키 배송 : 키의 길이는 통신문의 길이와 같기 때문에 키를 안전하게 보낼 수 있는 방법이 있다면 평문 그 자체를 같은 방법으로 안전하게 보낼 수 있다.
- 키 보존 : 평문과 같은 비트 길이의 키의 안전한 보존이 가능하면 평문 그 자체를 안전하게 보존할 수 있다.
- 키 재이용 : 랜덤한 비트열 재이용이 불가능하다.
- 키 동기화 : 통신하는 동안 송, 수신자 사이에 키 비트열이 1비트라도 어긋나서는 안된다.
- 키 생성 : 난수 대량 생서이 필요하다.
전사공격(brute-force attack)
- 키가 될 수 있는 모든 후보들을 시도해보는 방법
단일 치환 암호
- 평문을 구성하는 알파벳을 다른 알파벳으로 변환하는 암호
- 약점 : 문자의 빈도
- 치환표가 필요
- 단일치환암호 중 시저암호는 전사공격으로 해독 가능
다중 치환 암호
- 평문에 등장하는 문자의 빈도와 암호문에 등장하는 문자의 빈도를 다르게 만든 알고리즘
에니그마
- 암호화, 복호화를 수행하는 기계
- 회전하는 원반과 전기회로 이용
DES(Data Encryption Standard)
- 대칭 암호
- 전사공격으로 해독할 수 있는 수준
- 64bit 블록
- 56bit 키, 8bit 패리티 비트 (고정된 키 길이)
- 블록 단위로 나누고 대치와 치환을 반복적으로 사용
- 각 블록은 똑같은 알고리즘 적용
- ECB모드 : 블록이 독립적이기 때문에 해석하기 쉬워짐 => 블록끼리 묶어 어렵게 만드는 Block Cipher 알고리즘 이용
Triple DES
- 안전성을 높이기 위해 사용
- 기존 DES의 HW를 그대로 쓰면서 3번 암호화하여 키가 늘어나는 효과
- Ek1Dk2Ek1 : k1을 가지고 encrypt, k2를 가지고 decrypt => 56 * 2 = 112bit의 키를 갖는 효과
- Ek1Dk2Ek3 : 56 * 3 = 168bit의 키를 갖는 효과
- Ek1Ek2 => 56+1 = 57 bit의 안전성
- 은행 등에서 아직 사용한다. 처리 속도가 빠르지 않다.
AES(Advanced Encryption Standard)
- Rijndael
- 블록 길이 : 128bit
- 키 길이 : 128, 192, 256bit 등 가변적인 키 길이
우리나라 표준으로 사용하는 대칭키 알고리즘(SEED, ARIA)
블록 암호(Block Cipher)
- 특정 비트 수의 집합(block)을 한 번에 처리하는 암호 알고리즘
- 블록의 비트 수 : 블록 길이
<-> 스트림 암호 : 데이터의 흐름을 순차적으로 처리해가는 암호 알고리즈
- 블록 암호 모드
- ECB : 암호문을 살펴보는 것만으로도 평문 속의 패턴 반복성 감지
- CBC
- 1단계 앞에서 수행되어 결과로 출력된 암호문 블록에 평문 블록을 XOR 하고 나서 암호화 수행
- IV : Fixed 상수(난수)
- 암호화 : Serial하게 진행됨, 복호화 : 병렬 처리 가능
- 마지막 블록은 모든 블록의 정보를 담고 있음 (Message Integrity)
- 암호문 블록이 파손되면 2개의 평문 블록에 영향을 미침
- 비트가 누락되면 그 이후의 평문 전체에 영향을 미침
- 공격자가 IV를 반전시키면 복호화되어 얻어지는 평문 블록의 비트를 반전시킬 수 있음
- CFB
- 1단계 앞의 암호문 블록을 암호 알고리즘의 입력으로 사용
- 이전 암호문 블록을 먼저 암호화 => 평문 블록과 XOR
- 재전송 공격
- OFB
- 에러가 많이 발생하는 공간에서 사용
- 평문 블록과 암호 알고리즘의 출력을 XOR하여 암호문 블록을 만듦
- CTR
- COUNTER
- 1씩 증가해가는 카운터를 암호화해서 키 스트림을 만들어내는 스트림 암호
- 큰 사이즈 파일 암호화에 효과적(암, 복호화 병렬 가능)
키 배송 문제(Key Distribution)
- 대칭 암호를 사용하려면 송신자와 수신자가 대칭키를 사전에 공유해야 하는 문제
- 인원이 많아질수록 관리해야 할 키 수가 증가한다.
- n명 => nC2만큼의 키 필요
키 배포센터(KDC)
- 암호통신 때마다 통신용의 키를 키 배포 센터에 의뢰해서 개인과 키 배포 센터 사이에서만 키를 사전에 공유
- 구성원 전원의 키를 보존
- 구성원 수 증가 시 키 배포 센터의 부하
- 키 배포 센터의 컴퓨터 고장 시 조직 전체의 암호 통신 마비
- 키 배포 센터가 공격의 대상이 될 수 있음
공개키 암호
- 암호화, 복호화 키가 서로 다름
- private key, public key (private key는 공개 X)
- 암호화 할 수 있는 한계치가 존재
1. Diffie-Hellman 키 교환
- 암호 통신을 원하는 두 사람이 어떤 정보를 교환하여 이 교환한 정보를 가지고 동일한 키를 각각 생성
2. RSA
- 공개키 암호, 디지털 서명, 키 교환에 사용
- 암호문 = 평문^E mod N (E, N) : 공개키
- 평문 = 암호문^D mod N (D, N) : 개인키
- 소인수분해의 어려움을 이용
3. ElGamal 방식
- 이산로그 문제에 기반
- 암호문의 길이가 평문의 2배가 되어버린다는 결점
4. ECC(타원곡선암호)
- RSA에 비해 키의 비트 수가 적음
- 타원곡선 위에 곱셈 정의, 이 곱셈의 역연산이 어렵다는 점을 이용
- 공개키 암호의 인증 문제
- 입수한 공개키의 진위 판단 필요(중간자공격)
하이브리드 시스템 (공개키 + 관용암호방식)
- 대칭 암호는 기밀성을 유지한 통신이 가능하지만 키 배송 문제를 해결할 필요가 있다.
- 공개키 암호는 이 키 배송 문제를 해결할 수 있지만 큰 메시지를 암호화 시 속도가 느리다는 문제가 있다.
=> 공개키 암호를 키 암호화에 사용, 메시지 암호화는 대칭 암호 이용
- PGP : 전자우편 보안 매커니즘
- SSL/TLS : 브라우저, WEB 암호 통신에 사용
- 구성요소
- 의사난수 생성기(세션 키 생성에 사용)
- 대칭 암호 : 강한 암호 알고리즘 사용, 충분히 길이가 긴 키 사용, 적절한 블록 암호 모드 사용
- 공개키 암호 : 세션키 암호화에 사용, 강한 공개키 암호 알고리즘 사용, 충분히 길이가 긴 키 사용
- 키 길이의 밸런스
공개키 - 관용키
1024 - 128
2048 - 256
1. Ek[M] || EKUB[K] : 기밀성
2. M || EKRA[H(M)] : 무결성, 사용자 인증, 부인봉쇄
3. EK[M || EKRA[H(M)]] || EKUB[K] : 기밀성, 무결성, 사용자 인증, 부인봉쇄
해시함수(One way Funciton)
- 계산이 빠르다.
- any size를 넣어도 fixed size가 나온다.
- 한계 : 서로 다른 input이 동일한 output을 가질 수 있음. (찾아내기 어렵다는 조건)
- 충돌 내성
- 약한 충돌 내성 : 메시지의 해시 값이 주어졌을 때, 같은 해시값을 갖는 M'을 발견해 내는 것이 매우 곤란한 성질
- 강한 충돌 내성 : 해시값이 일치할 것 같은 다른 2개의 메시지를 발견해 내는 것이 매우 곤란한 성질 (주어지지않음)
- 해시 함수의 활용
1. SW의 변경 검출
2. PBE(패스워드 기반 암호화)
- 패스워드 + salt 의 해시값을 암호화 키로 사용 => 사전공격 방어(salt)
3. 메시지 인증 코드
- 송, 수신자만이 공유하고 있는 키와 메시지를 혼합해서 그 해시값을 계산한 값
- SSL/TLS에서 사용
4. 디지털 서명 : 처리시간 단출을 위해 메시지의 해시값을 구하고, 그 해시값에 디지털 서명 수행
5. 의사난수 생성기 : 해시가 random한 bitstream을 만들어줌, 예측불가능성을 보증하기 위해 해시의 일방향성을 이용
6. 일회용 패스워드 : 정당한 클라이언트인지 서버가 인증할 때 사용
- RIPEMD-160 : 비트코인에서 사용하는 해시함수
- 활용
1. M || EKRA[H(M)] : 전자서명
2. EKS[M || EKRA[H(M)]] || EKUB[KS] : 기밀성 + 전자서명(사용자인증, 무결성, 송신부인봉쇄)
3. M || H(M) : 불법변경 확인
4. M || H(M || S) : S는 Secret key, S를 모르면 해시값을 바꿀 수 없음
5. EH(PWD)[KRA]
메시지 인증 코드(MAC, Message Authentication Code)
- "메시지가 올바른 송신자로부터 온 것이다"는 성질
- 무결성과 인증에 대한 위협
1. 공격자가 메시지를 탈취해 변경(중간자)
2. 공격자가 송신자로 위장하고 메시지 전송
- 무결성, 인증을 해결하는 방법
- 입력 : 메시지, 공유하는 키
- 출력 : 고정 비트의 코드
- 키 배송 문제
- 공개키 암호
- 디피 헬만 키 교환
- 키 배포 센터
- PSK(Pre Shared Key)
1. 일방향 해시함수를 이용한 실현 (HMAC)
2. 블록 암호를 이용한 실현
- 블록 암호 키를 메시지 인증 코드의 공유키로 사용
- CBC모드로 메시지 전체를 암호화, 맨 마지막 블록은 모든 내용을 함축하고 있음
- 키, 마지막 블록의 암호문을 이용해 MAC으로 사용 가능
3. 스트림 암호
4. 공개키 암호
1. 재전송 공격 : 보존해 둔 정당한 MAC 값을 반복해서 송신
방어
1. 순서 번호
2. 타임 스탬프
3. 비표(NONCE)
2. 키 추측 공격
방어
MAC값만 획득한 공격자가 키를 추측하지 못하도록 해야함
1. 해시함수의 일방향성, 충돌 내성
2. 키 생성에 의사난수 생성기 사용
메시지 인증코드로 해결할 수 없는 문제
1. 제3자에 대한 증명 (키를 제3자에게 알려줄 수 X)
2. 부인 방지 (송신자가 송신 자체를 부정하는 경우 제3자에게 증명 불가)
HMAC
- 일방향 해시함수를 이용해 메시지 인증 코드를 구성하는 방법
- HMAC(K, M) = H[(K+ XOR OPAD) || H[(K+ XOR IPAD) || M]]
디지털 서명
- 메시지 송신 시 개인키를 써서 서명을 작성
- 수신자는 공개키를 써서 서명을 검증
- RSA에 의한 서명
- 중간자 공격 : 입수한 공개키가 정확한 상대의 것인지 확인 필요
- 핑거프린트 : 공개키를 취급하는 SW에서 공개 키의 해시 값을 표시하는 수단
인증서
- X.509 : 인증서의 표준 양식
- 공개키 기반 구조(PKI)
- 이용자가 키 쌍을 작성하고 인증기관에 공개키를 등록
- 인증기관으로부터 인증서 발행받기
- 수신한 암호문 복호화, 메시지에 디지털 서명 등에 활용
- 인증 기관(CA)
- 최상위 인증기관인 RootCA의 경우 self-signature : 자신의 공개키에 대해 자신의 개인키로 서명
- 인증서 관리
- 키 쌍 작성
- 공개키 등록 시 본인인증 (등록기관 RA가 대행하기도 함)
- 인증서 작성, 발행, 폐지
- CRL (Certificate Revocation List) : 폐지된 인증서인지 확인
사설인증서 : 키 생성을 기업이 하고 개인키는 어디에 보관했는지 알 수 없음 (사설인증기관이 알아서)
=> 개인키 관리 부담이 줄어듦
DID(Decentralized IDentity)
- 분산형 시스템
- 블록체인 기반 분산 신원 확인
- 자기 스스로 신분을 증명할 수 있는 모델
- 사용자끼리 서명해서 trust chain을 만드는 (내가 잘 아는 B가 서명했으니까 A 맞구나)
Computationally Secure
- 양자컴퓨터가 나오면 공개키 2048bit도 깨질 수 있다.
- PQC 알고리즘이 국제표준화되어 나오기 시작 (RSA 대체 예정)
- QKD(Quantum Key Distribution) : 양자통신을 이용해 암호키를 분배하는 방법
TEE(Trusted Execution Environment)
- 안전한 스토리지 + 안전한 실행공간을 만들자 => 암호키들을 보관
FIDO(Fast Identity Online)
- 공개키 방식
- 생체정보는 해킹당해도 바꿀 수 없기 때문에 서버에 보관하면 안된다.
=> 사용자 인증이 사용자단에서 일어나는 방식
CEK(Contents Encrypting Key) : 정보가 암호화의 대상
KEK(Key Encrypting Key) : 키가 암호화의 대상
난수의 성질
1. 무작위성 : 통계적인 편중 없이 수열이 무작위로 되어 있는 성질
2. 예측 불가능성 : 과거의 수열로부터 다음 수를 예측할 수 없다는 성질
3. 재현 불가능성 : 같은 수열을 재현할 수 없다는 성질 (SW적으로는 재현불가능성을 구현하기 어려움, HW 필요)
진성난수 : 3가지 성질을 모두 가지는 난수
구체적 의사난수 생성기
1. 무작위 방법 : 긴 주기를 가져야 함, 명확한 알고리즘(예측불가능성을 갖는지 판단하기 위해)
2. 선형합동법 : 일반적으로 가장 많이 사용하지만 암호 기술에는 사용 불가
3. 해시 이용 방법 : 해시의 일방향성이 예측불가능성을 보장
4. 암호 사용 방법 : 암호의 기밀성이 예측불가능성을 보장
5. ANSI X9.17 : PGP(전자우편 보안 메커니즘)에서 사용하는 의사난수생성기
Ri = Ek[Ek[DTi] XOR Vi]
Vi+1 = Ek[Ek[DTi] XOR Ri]
Ri : 의사난수열, Vi : 초기값, DTi : 현재시각
Authentication by Knowledge : PASSWORD, PASSPHRASE
Authentication by Ownership : OTP
Authentication by Characteristic : 지문, 홍채 인식
OTP(One Time Password) : 일회용 비밀번호
블록체인
- 한 번 올라가면 안지워짐(안바뀜)
- 신뢰할 수 있는 공간
TLS
- 세션관리 필요
- 사용자 인증(수신) 불가 : 사용자가 인증서를 갖는 것 자체가 쉽지 않음, 보통 id, pwd로 인증
- 부인봉쇄 불가 : 전자서명이 기본적으로 필요한데, HTTP 프로토콜 특성 상 지원 불가