출처 : http://kit2013.tistory.com/213


1. 보안요소 기술(10문제+-/20문제)


(1) 인증기술

1) 사용자 인증기술

- 사용자 인증 : 통신하고 있는 상대가 내가 원하는 상대인지 확인할 수 있도록 해주는 기술

-- A와 B가 통신할 때, A가 B에게 자신이 A임을 증명할 수 있는 것

-- 개별식별 : 사용자 인증에서 더 발전해서, A와 C가 통신할 때 B가 C에게 A인척 못하게 하는 것

- 사용자 인증 유형별 방법

-- What you know(지식기반 인증방식) : ID/PW, I-PIN, 사전에 등록된 질문과 답

--- 사람의 지식에 따른 내용으로 인증 / 관리가 편하고 용이 / 습관에 따라 패스워드 설정하기에 유추쉽고 보안성 낮음

-- What you have(소유기반 인증방식): OTP, HSM, 보안카드, 스마트카드, 공인인증서

--- 소지한 별도 매체의 고유정보를 직접 제시 / 매체에 대한 분실 우려

-- What you are(생체기반 인식기술) : 지문, 홍채, 음성, DNA, 서명, 망막

--- 인증자의 신체적인 특성이나 행동학적 특성을 이용해 인증

- Chalenge-Response방식(이걸 어따 넣어야될지 모르겠네 / OTP에서도 쓰임)

-- 사용자가 서버에 암호화 키 자체를 직접적으로 전송하지 않으면서 해당 비밀키나 개인키를 소유하고 있는 정당한 사용자임을 증명

-- 매번 새로운 세션의 차별성을 위해 타임스탬프 / 세션 랜던 값 / 순서번호 를 이용할 수 있음

-- 대칭키를 이용한 방법

--- 사전에 사용자와 서버간의 대칭키를 공유하는 방식

--- 사용자가 서버로 접속해 서버로 부터 난수 값을 받아서 그걸 대칭키로 암호화해서 보내는 것

-- 공개키를 이용한 방법

--- 사용자가 서버로 접속해 서버로 부타 난수 값을 받아서 그걸 개인키르 암호화해서 보내는 것

- 사용자 인증의 보안 요구사항 : 식별 / 인증 / 인가 / 책임추적성


2) 메시지출처 인증기술

- 메시지 또는 자료의 출처가 알려진 출처가 맞는지 확인하는 기술

- 메시지출처를 인증하는 기술은 크게 "메시지를 암호화 하는 방법 / 메시지 인증코드 / 해시함수" 로 나뉨

- 메시지를 암호화 하는 방법

-- Case 1) 대칭키를 이용해 암호화 → 기밀성 + 부분적인 인증(송신부인방지)

-- Case 2) 비대칭키를 이용한 암호화

--- i) 수신자의 공개키로 암호화 → 기밀성

--- ii) 송신자의 사설키로 암호화 → 인증과 서명

--- iii) 송신자의 사설키로 암호화하고 수신자의 공개키로 암호화 → 기밀성 + 인증과 서명

- 메시지 인증코드(MAC ; Message Authentication Code)

-- 메시지와 대칭키를 입력으로해 인증값으로 쓰기 위해 만들어진 코드

-- 사전에 송신자와 수신자 간의 대칭키의 공유가 필요함

-- 수신자는 수신한 메시지와 대칭키를 가지고 직접 MAC을 만들어, 수신한 MAC과 비교해 인증을 수행

- 해시함수

-- 데이터를 정해진 크기의 Message Digest로 만드는 일방향함수(One-Way Function)

-- MAC과 달리 대칭키를 사용하지 않기에 키교환이 필요 없음

-- 해시함수의 결과값 자체는 기밀성이 없어서 암호화와 섞어서 사용함


3) 디바이스 인증기술

- 유비쿼터스 시대 네트워크에 들어서면서 디바이스와 디바이스 끼리의인증을 해야되는 일이 많아짐

- 디바이스와 사람간의 인증체계, 이기종 디바이스 간의 인증체계, 인증체계와 콘텐츠 보호와의 연동의 필요성이 생김

- ID/PW기반 디바이스 인증

-- 일반적으로 사용되는 이증방식

-- SSID방식 / WEP 인증방식 / RFID와 리더기 간의 인증방식 등

- MAC주소기반 디바이스 인증

-- 접속 하는 단말기의 MAC주소값을 인증서버 또는 AP에 등록해서 인증받는 방식

-- AP에서 사용됨

- 암호 프로토콜을 이용한 디바이스 인증

-- AP를 통한 정보자산의 불법적인 접근 또는 키나 세션을 훔쳐 정보를 유출하는 시도를 차단

-- 802.1x 인증 : 유무선 네트워크에서 인증된 네트워크를 접속하는 IEEE 표준

--- 사용자 ID 인증, 동적 키 관리 및 계정 지원

--- PAP / CHAP / RADIUS / PEAP / WEP 프로토콜

-- 802.11i 인증 : RC4 기반의 WEP 기술에 대한 취약점 해결하기 위해 제정

-- WPA(Wi-Fi Protected Access) : WEP에 비해 정교한 데이터 암호화와 완전한 사용자 인증기능 제공

--- TKIP과 802.1x 인증 방식을 사용

-- EAP(Extensible Authentication Protocol) : 인증을 위해 최적화된 전송 프로토콜

--- EAP-MD5 / EAP-TLS / EAP-TTLS / EAP-PEAP / EAP-Fast / LEAP

- Challenge-Response 인증

-- OTP에서의 Challenge-Response와 유사하게, 일회성 해시값을 생성해 사용자를 인증하는 방법

-- 인증서버가 난수를 만들어 클라이언트로 전송하면, 클라이언트는 패스워드 해쉬 알고리즘을 적용해 반환 함


4) Kerberos 프로토콜

- MIT에서 개발한, 분산 환경하에서 개체 인증서비스를 제공하는 네트워크 인증시스템 / 현재 네트워크상에서 가장 많이 사용 됨

- 사용자가 서버의 인증을 받기 위해 티켓이라는 인증값을 사용

- 비대칭키 암호방식을 전혀 사용하지 않고, 대칭키 암호방식만 사용하여 신뢰된 티켓 발급서버를 이용해서 인증

- 구성요소 : 클라이언트(다수) / 인증서버(AS) / 티켓발급서버(TGS) / 서버(다수)

-- 클라이언트가 패스워드로 인증서버에게 인증을 받음

-- 인증서버는 티켓발급서버가 인증된 클라이언트로 티켓을 발급하는 것을 허락함

-- 티켓발급서버가 클라이언트로 티켓을 발급함

-- 티켓을 받은 클라이언트는, 티켓을 이용해 서버에 인증을 받고 서비스를 받음

- Realm(영역) : 하나의 Kerberos 시스템에 속해 있는 클라이언트와 서버의 범위

-- 영역 안의 클라이언트들은 영역 안의 각 서버에대한 권한이 다름 / 권한에 따라 접속할 수 있는 기간도 다름

- 신임장(Credential) : 티켓발급서버가 클라이언트에게 발급하는 것으로 티켓(Ticket)과 인증자(Authenticator)로 구성

-- 인증자 : 티켓이 유효하다는 것을 증명하기 위해 사용되는 값으로 부가정보를 포함

-- 티켓의 포함 내용 : 클라이언트 ID와 네트워크주소 / 티켓의 유효기간 / 접속하기원하는 서버의 ID / 서비스기간동안 공유하는 세션키

http://www.zeroshell.org/kerberos/Kerberos-operation/

- 장점 : 통신내용을 암호화키와 암호프로세스를 이용하여 보호하기에 데이터의 기밀성과 무결성이 보장됨

- 단점

-- 모든 클라이언트와 암호화 키에 대한 정보가 KDC에 있기에, KDC 단일 오류 지점이 될수 있음

-- 비밀키와 세션키가 사용자 시스템에 저장되기에 유출과 침입에 취약

-- 패스워드 추측 공격에 취약하며, 사용자가 패스워드를 바꾸면 대칭키 또한 변경해야되는 번거로움

-- 티켓의 유효기간 때문에, 모든 클라이언트와 서버간의 시간의 동기화가 필요함

-- 가장 큰 문제점으로, 재전송 공격에 약함

- Kerberos 4

-- 암호화 시스템에 대해 의존함, DES 알고리즘 사용

-- 인증의 발송과 영역간의 인증은 불가능

- Kerberos 5

-- CBC 모드 사용(암호화 하는 방법임), 알고리즘 선택이 가능

-- 티켓의 유효시간에 시작기간과 끝 시간을 표시함

-- 인증의 발송과과 영역간의 인증이 가능



(2) 접근통제정책

1) 접근통제정책 구성요소

- 접근통제는 인증 성공 이후에, 각 시스템 자원에 대한 사용자의 요청을 허용할것인가? 말것인가?하는 문제

- 접근통제 시스템은 기능적으로 접근통제 정책 / 접근통제 매카니즘 / 접근통제 관련 보안 모델로 나뉨

-- 접근통제 정책

--- 신분 기반 정책 : 주체의 신분에 근거한 접근통제 정책

---- 임의적 접근통제(DAC)에 적용

--- 규칙 기반 정책 : 주체에 허용된 접근 수준과 객체에 부여된 허용등급 에 따른 접근통제 정책

---- 강제적 접근통제(MAC)와 동일한 개념

---- 라우터나 방화벽 등의 접근통제에 쓰임

--- 역할 기반 정책 : 객체에 대한 접근이 주체의 역할에 의해 결정되는 접근통제 정책

---- 역할기반 접근통제(RBAC)와 동일한 개념

-- 접근통제 메카니즘 : 접근요청을 접근통제 정책에 대응시켜 불법적인 접근을 방어함

--- ACL(Access Control List) : 신분 기반 정책을 지원

--- CL(Capability List) : 신분 기반 정책을 지원 / 주체에게 티켓을 부여(접근 객체와 범위가 지정됨)

--- SL(Security Lable) : 규칙 기반 정책을 지원

--- 더 많긴한데 모르겠다.. 필요하면 추가함

-- 접근통제 관련 보안 모델(다양한데 잘나오는 3가지만)

--- Bell-LaPadula(BLP)

---- 데이터의 기밀성유지를 주목적(미국방부에서만듬) / 정보의 불법적 유출을 방어하기 위한 최초의 수학적 모델

---- 단순보안속성(Simpe Security Property) : 주체는 자신의 보안등급보다 높은 등급의 객체에 접근불가 ; No Read Up

---- 성형속성(The ★-Property) : 주체는 자신의 보안등급보다 낮은 등급의 데이터를 수정할수 없음 ; No Wirte Down

--- Biba

---- 데이터의 무결성유지를 주목적으로 함(비 군사적 조직) / Bell-LaPadula 모델의 단점인 무결성을 보장할 수 있도록 보완

---- 단순무결성원리(Simple Integrity Axiom) : 주체집단에게 주어진 무결성등급보다 낮은 객체는 못 읽음 ; No Read Down

---- 성형무결성원리(The ★-Integrity Axiom) : 주체에게 주어진 무결성등급보다 높은 등급의 객체는 수정 못함 ; No Write Up

--- Clark-Wilson

---- Biba 이후에 나왔으며, Biba의 무결성 보호를 조금 다른 관점에서 접근함

---- 주체가 객체에 직접접근은 할 수 X / 오직 프로그램을 통해 간접적으로 접근


2) 임의적 접근통제(DAC ; Discretionary Access Control)

- 신분 기반 정책을 적용했다고 보면될려나??

- 어떤 사용자든 임의적으로 객체에 대한 다른 사용자들의 접근을 허용할 수 있는 기법

-- 데이터 소유자가, 사용자나 사용자 그룹에 따라 접근을 제어

-- 예를 들자면, Windows에서 Everyone같이 그룹단위로 접근제어 하는거 생각해봐

--- DAC는 대부분 운영체제에서 지원됨

- 모든 주체와 객체에 대해 일정하며, 하나의 주체와 하나의 객체 단위로 접근 제어는 불가능

- 구현을 위해 일반적으로 ACL(Access Control List)을 활용 / 중앙집중적으로 통제되는 환경에서 부적합

- 결론적으로, 사용자가 누구고 어떤 그룹에 속해있는지에 따라 접근통제가 이루어져


3) 강제적 접근통제(MAC ; Mandatory Access Control)

- 규칙 기반 정책을 적용 했다고보자...(이게 맞는 건지는 모르겠으나 다들 그렇게 연결 짓던데?)

- 관리자가 주체들에겐 허가등급을, 각각의 객체에는 비밀등급을 부여해서 주체의 허가등급과 객체의 비밀등급을 따져 접근을 제어함

-- 주체들과 객체들의 등급을 따로 보안레이블에 저장해둠

-- 운영체제(관리자) / 주체(프로세스 들) / 객체(시스템 리소스) 이렇게도 쓰여

- 최상의 허가등급을 가진 사용자라도 모든 객체를 열람 할 수는 X

- 통제가 용이하고 보안관리자 주도하에 중앙 집중적 관리가 가능하다는 장점

- 기밀성이 매우 높은 조직에서 사용됨


4) 역할기반 접근통제(RBAC ; Role Based Access Control)

- 역할 기반 정책의 적용 / 임의적 접근통제와 강제적 접근통제의 단점을 보완한 기법(비 임의적 접근통제라고도함)

- 역할들을 생성해서 역할마다 권한을 준다음, 사용자들에게 각 역할을 부여함. 즉, 사용자의 역할에 따라 접근을 제어 함

- 규모가 큰 회사에 알맞은 시스템(인사이동 등이 잦아도 그냥 사용자의 역할만 변경하면 됨)


5) 접근통제행렬과 AC

- 접근통제행렬 : 주체를 열에, 객체를 행에 표시해서 각각에 권한을 부여하는 방법

- AC(Access Control ; 접근통제) : 몇몇 접근통제 모델은, 해당 모델이 가지고 있는 접근통제 메카니즘을 보안모델로 발전시킴

-- 접근통제 메카니즘과 보안모델은 1)에서 설명



(3) 키 분배 프로토콜

1) KDC 기반 키 분배

- KDC(Key Distribution Center)

-- 암호통신을 원하는 두 가입자 사이에, 공통의 암호키를 소유할 수 있고 키 분배 과정을 수행하는 신뢰된 기관

-- 간단히 말해, 비밀키를 만들어서 대칭키 암호화 통신을 원하는 사람들에게 키를 나누어 주는 역할

-- 키를 나누어 준 뒤, KDC에서 키를 삭제하는것도 좋지만 분실에 대비하는것도 좋음(이런 의미에서 키 복구센터라고도함)

-- 인원이 많아지면, 관리하는 키의 수가 기하급수적으로 증가해 현실적으로 관리가 불가능

- 키 분배 방식

-- 키의 사전분배(Key Predistribution) 방식 : 한 가입자가 키를 만들어, 상대 가입자 혹은 양측 가입자에게 전달하는 방식

--- Blom 방식 / 중앙집중식 키 분배(Kerberos에서 사용) / 공개키 분배(KDC가 공개키 분배)

-- 키 공유방식(Key Agreement) 방식 : 키를 설정하는데 공동으로 참여

--- Diffie-Hellman 키 교환 방식 등등


2) Needham-Schroeder 프로토콜

- Roger Needham과 Micheal Schroedor이 1978년 대칭키와 trent 개념을 사용해 제안

- 인증서버 S / 통신주체 A / 통신주체 B 가있다고 가정하고 설명(K는 키값 / N은 난수값)

-- 1) A → S : A / B / N_A

--- (A가 S에게 B와 통신하고 싶다고 알림 ; A와 B의 ID와 A가 생성한 난수값보냄

-- 2) S → A : N_A / K_ab / B / [ [ K_ab, A ]K_bs ]K_as

--- (S가 A에게, B와 통신할 때 쓸 키 K_ab를 주고, B에게도 알려주라고 K_ab를 K_bs로 암호화 해서 줌

-- 3) A → B : [ K_ab, A ]K_bs

--- 아까 S가 B주라고 줬던걸, B한테 보내줘

-- 4) B → A : [ N_b ]K_ab

--- A로부터 키 값 K_ab를 받은 B는 응답신호로써 자신이 생성한 난수값 N_b를 암호화 해서 보냄

-- 5) A → B : [ N-b - 1 ]K_ab

--- B로부터 받은 난수값에서 1빼고 암호화 해서 보내

- 재전송 공격의 취약점이 있음(MITM에 취약) 그래서 타임스탬프를 사용함

-- 타임스탬프사용해서 하는건 위의 1)에서 타임스탬프를 주거니 받거니함(걍 생략)


3) Diffie-Hellman 프로토콜

- 1976년 Diffie와 Hellman이 발표한 것으로 이산대수 계산의 어려움을 이용함 / 공개키 암호의 시초

- 네트워크상에서 A와 B가 알고리즘에 사용하는 비밀키를 서로 만나지않고 공유할 수 있는 방법

- Alice와 Bob이 키교환하고자함!

-- 1) Alice와 Bob은 소수 p와 p미만의 임의의 정수 g를 선택해 공유함

-- 2) Alice와 Bob은 서로 비밀키 a와 b를 만듬

-- 3-1) Alice는 A = g^a (mod p)를 계산해 공개키 A를 Bob에게 보냄

-- 3-2) Bob은 B = g^b (mod p)를 계산해 공개키 B를 Alice에게 보냄

-- 4-1) Alice는 B^a (mod p)를 계산하고, Bob은 A^b를 계산해서 A^b = B^a = g^ab (mod p)라는 결과를 만들어냄

-- 5) g^ab (mod p)를 둘 만의 비밀키로 사용

- 세션키 같은거 필요없고 단순하고 효율적으로 키 교환이 가능

- 재전송 공격(MITM)에 취약함


4) RSA 이용 키 분배 방법(RSA 암호 알고리즘을 말하는게 아냐)

- RSA는 소인수 분해의 어려움을 이용하는 암호 알고리즘임

- 일단, 여기선 RSA를 이용한 키 분배 방법이기에 키 생성가은건 집어치우고 시작

-- 1) Alice와 Bob이 각각 공개키 쌍과 사설키 쌍을 만듬

-- 2) Alice가 공개키 쌍과 자신의 ID값을 Bob에게 보냄(ID값은 뭐..그냥 자기라고 인증할만한 값?인듯)

-- 3) Bob이 공유할 대칭키를 생성해서 Alice의 공개키로 암호화해서 Alice에게 보냄

-- 4) Alice는 받은 대칭키로 데이터를 암호화해서 보냄(여기부터 통신시작)


(4) 전자서명과 공개키 기반구조(PKI)

1) 전자인증서 구조

- 사용자 공개키와 사용자 ID정보를 결합해 인증기관이 서명한 문서 / 공개키의 인증성을 제공

- 쉽게말해, 사용자의 공개키 + 사용자의 공개키에 대한 인증기관의 전자서명 = 사용자의 전자인증서

- X.509 인증서 표준 : ITU에서 제안한 인증서에 대한 기본 형식을 정의한 규격

-- 인증서를 이용한 공개키의 효율적인 분배 방법을 정의

-- X.509 v1(1988)

-- X.509 v2(1993)

--- 인증서 취소목록(CRL ; Certificate Revocation List)을 도입

--- 인증기관 고유 ID(Unique Identifier) 도입 : 한 주체가 둘 이상의 인증기관으로 부터 인증서가 발급됬을 경우 구분하기 위해

--- 주체 고유 식별자 : 주체를 식별하는 값(동명이인일 경우 구분하기 위해)

-- X.509 v3(1996)

--- 인증기관 키 식별자

--- 주체키 식별자

--- 키 용도 : 암호용인지 서명용인지 구분

--- v3부터는 확장자의 개념이 도입됨

---- 키 및 정책 확장자

---- 주체와 발급자에 대한 속성 정보

---- 인증서 경로 및 규제 정보

---- CRL을 위한 확장자

- 전자인증서 구조

-- 버전(Version) : X.509의 몇 번째 버전이냐??

-- 일련번호(Serial Number) : 발행하는 CA 내부에서의 유일한 정수값

-- 알고리즘 식별자(Algorithm Identifier) : 인증서를 생성하는데 어떤 알고리즘 썻는지

-- 발행자(Issuer) : 인증서를 발행하고 표시하는 CA

-- 유효기간(Period of Validity) : 인증서가 유효한 시작과 끝기간

-- 주체(Subject) : 인증서가 가르키는 사람

-- 공개키 정보(Public-key Information) : 주체의 공개키와, 이 키가 사용될 알고리즘 식별자

-- 서명(Signature) : CA의 개인 서명키로 서명한 서명문


2) 전자서명 보안 서비스

- 전자서명(DIgital Signature) : 내가 받은 메시지를 어떤 사람이 만들었는지를 확인하는 인증

- 전자서명의 기능 : 사용자인증(송신 부인방지) / 메시지 인증(무결성의 보장의 개념)

- 전자서명의 특징 : 위조불가 / 서명자 인증 / 부인 불가(서명사실에 대해) / 변경불가(변조불가) / 재사용 불가

- 전자서명 방식에 따른 분류

-- 직접 서명(Direct Digital Signature) 방식 : 혼자서 서명알고리즘 수행하고 서명하는 방식

--- 키가 유출되면, 송신 부인방지가 안되며 기타 다른 요구사항이 충족 안됨

-- 중재 서명(Arbitrated Digital Signature) 방식 : 서명자가 서명해서, 중재자에게 보내면 중재자가 한 번더 서명하는 방식

-- ※ 전자서명 알고리즘의 분류

--- 메시지 복구가능 전자서명 알고리즘(DSS ; Digital Signature Scheme) : 서명값으로 부터 메시지 추출해서 검증가능

--- 원메시지 필요 전자서명 알고리즘(DSS with appendix) : 검증을 위해 따로 원메시지가 필요

- 전자서명 방법

-- 메시지에 직접하는 방법

-- 메시지의 해쉬값에 서명하는 방법 : 좀더 효율적


3) PKI 구성방식(계층, 네트워크)

- PKI(Public Key Infrastructure ; 공개키 기반 구조) : 공개키 인증서의 인증성(무결성)을 제공하기 위한 신뢰구조

- PKI 구성요소(컴포넌트 ; Component)

-- 공개키 인증서(Public Key Certificate) : 해당 키가 누구 것인지 알려줌(공개키 정보와 주인의 정보)

--- 구성 : 공개키 인증서/ 인증서 정책 / 인증서 경로 / 인증서 철회 리스트(CRL ; Certificate Revocation List)

-- 인증기관(CA ; Certification Authority)

--- 인증서의 발급 / 상태관리 / 문제 발생 시 CRL의 발급

--- 지금까지 발행한 인증서와 모든 CRL을 저장

-- 등록기관(RA ; Registration Authority) : 인증서 신청시, CA대신 신분, 소속을 확인해주는 기관

-- 저장소, 디렉터리(Repository) : 공개키를 저장하고 있는 기관

--- CA로부터 인증서와 CRL을 받아 저장하고, 이를 요구하는 사용자에게 나눠줌

-- 사용자(User)

- PKI 구성 방식

-- 순수 계층 방식(트리구조)

--- 최상위 인증기관인 Root CA에 대한 신뢰를 바탕으로, 하부 CA간의 상호인증은 원칙으로 배제하는 방식

--- Root CA간의 상호 인증으로 국제적으로 구성이 가능

-- 네트워크 구조 방식

--- 여러 Root CA를 두어 운영함 / 복잡함


4) CRL 구조 및 기능

- CRL(Certificate Revocation List) : 인증서 취소 목록

- 취소 이유

-- 인증서 발행 조직에서 탈퇴 / 비밀키의 손상 / 비밀키 유출 의심

-- 인증서 소유자나 소유자의 대리인의 취소 요구

- 인증서 취소 메카니즘 : X.509에서 정의된 CRL을 이용해 관리

- CRL은 네트워크를 통해 공개되고 Repository에 저장됨

-- 주기적으로 CRL을 생성하는 방법과 실시간으로 생성하는 방법이 있음(하이브리드 하는게 좋음)


5) OCSP 동작절차

- OCPS(Online Certificate Status Protocol) : 실시간으로 인증서가 유효한지 검증하는 프로토콜

-- CRL과 마찬가지로 유효성을 검증할 수 있는 프로토콜(업데이트 주기나, 비요 등에서 차이가 있어)

- OCSP 방식은 CA와 Repository와는 별도로 OCSP 서버를 하나 두고, 사용자의 검증 요구에 대한 결과를 제공하는 방식

-- OCSP Server는 특정 CA기관과 사용계약을 맺어야하고 사용량에 따라 추가 비용 지불

-- OCSP Server가 CA기관과 계약을 맺으면 OCSP Server에 Server 인증서와 개인키가 발급됨

-- OCSP Server 인증서는 1년마다 교체해야됨

- OCSP 동작 절차

-- 1) CA 내부에 OCSP Responder가 존재

-- 2) OCSP Server가 CA내부의 OCSP Responder로 OCSP Request 전송

-- 3) 인증서의 폐기 여부를 검증함

-- 4) CA에서 OCSP Server로 OCSP Response 전송

- OCSP와 CRL의 비교

-- CRL같은경우는 실시간이 아니라 일정한 주기마다(6시간~24시간) 폐기목록을 생성

-- CRL이 갱신되어야 폐기로 판단

-- 따로 비용이 들지는 않음


6) 전자서명 관련법규

- 이건 나중에 법규할 때 다루자




2. 암호학(12문제~13문제/20문제)

(1) 암호 알고리즘

1) 암호 관련용어

- 평문(Plaintext) / 암호문(Ciphertext)

- 암호화(Encryption) / 복호화(Decryption)

- 전자서명(Digital Signature)

- 기밀성 / 무결성 / 가용성 / 부인방지


2) 암호 공격방식

- 수동적 공격(소극적 공격)

-- 도청 / 트래픽 분석

- 능동적 공격(적극적 공격)

-- 변조 / 삽입 / 삭제 / 재생

- 암호 메시지에 대한 공격(해독하려는 시도)

-- 암호문 단독 공격(Ciphertext Only Attack/COA)

-- 알려진 평문 공격(Known Plaintext Attack/KPA)

-- 선택 평문 공격(Chosen Plaintext Attack/CPA)

-- 선택 암호문 공격(Chosen Ciphertext Attack/CCA)



3) 대칭키, 공개키 암호시스템 특징 / 4) 대칭키, 공개키 암호시스템 활용

- 대칭키 암호시스템(비밀키/관용키 암호시스템)

-- 암호화키와 복호화키가 동일함

-- 암호화와 복호화가 빨라서 효율적임

-- 치환가 전치의 조합으로 간단한 구조로 개발 쉬움(Feistel 구조를 기반으로 해서 그런듯)

-- 많은 사람과의 정보교환시 키 관리의 어려움이 있음(N명의 경우 N(N-1)/2의 비밀키가 필요

-- 암호화에 적용되는 평문에 따라 Stream Cipher / Block Cipher

-- Steam Cipher : RC4

-- Block CIpher : DES(3DES) / IDEA / RC5 / RC6 / AES / SEED / Blowfish /ARIA

http://www.slideshare.net/skccsocial/security-framework220

- 공개키 암호시스템(비 대칭키 암호시스템)

-- 암호화키와 복호화키가 다름

-- 다른 유저와 키를 공유안해도 암호화 통신이 가능

-- 수학적인 난제을 기반으로해서 암/복호화가 복잡

--- 이산대수를 이용 : Diffie-Hellman / El Gamal / DSA / KCDSA / Schnorr

--- 소인수분해를 이용 : RSA / Rabin

--- 기타 : ECC(타원곡선) / Knapsack


5) 스트림 암호

- 대칭키 암호시스템 구조 중 하나로, 한번에 한 바이트씩 암호화되는 형식(가장 처음에 초기값(IV ; Initial Vector)가 필요)

- 가장 중요한 건 키 스트림을 생성하는 것(동기적 / 비 동기적)

-- 동기식 스트림 암호 : 키 스트림을 대칭키와 이전상태로부터 뽑아냄(예를 들어, N키스트림과 N+10 키 스트림이 동일)

--- 대표적으로 RC4가 있음

-- 비동기식 스트림 암호 : 키 스트림을 대칭키와 평문으로 부터 뽑아냄

- 키 스트림의 무작위성이 암호의 강도가 됨


6) 블록 암호

- 대칭키 암호시스템 구조 중 하나로, 고정된 크기의 블록을 고정된 크기의 암호화 블록으로 암호화하는 방식

- Feistel 구조와 SPN구조를 다루고 싶지만...

- 블록암호 운영모드 : 평문의 길이가 블록의 크기보다 클 경우에 대한 문제점을 해결하기 위해 제시된 암호화 모드

-- ECB(Electronic Code Book) : 평문을 블록단위로 잘라서, 각 블록마다 암호화

--- C[i] = Ek( M[i] )

--- 블록 크기보다 작으면 적용 불가능

--- 이전 블록 값의 오류가, 이후에 영향을 안줘(소규모 암호화에 적합)

---- 오류 전파가 안된다는 특징

---- 동일한 평문엔 동일한암호문이 나와 → 암호문 단독공격에 약해


-- CBC(Cipher Block Chaining) : 출력되는 암호문이 다음 평문 블록에 영향을 줘

--- C[i] = Ek( C[i-1] × M[i] )

--- 암호화 과정에서, 평문 블록 M[i]에서 1bit가 오류 → 암호문 블록 C[i]부터 끝까지 영향

---- ECB가 암호문 단독공격에 취약한걸 해결

---- 이런 특징 때문에, 메시지 인증코드에 사용되기도 해(무결성이 유지되기에)

--- 복호화 과정에서, 암호문 블록 C[i]에서 1bit가 오류 → 평문 블록 M[i], M[i+1]에만 영향


-- CFB(Cipher Feed Back) : 암호문이 암호기의 입력으로 사용되

--- C[i] = Ek( C[i-1] ) × M[i]

--- 암호화 과정에서, 평문 블록 M[i]에서 1bit가 오류 → 암호문 블록 C[i]부터 끝까지 영향

---- ECB가 암호문 단독공격에 취약한걸 해결

--- 복호화 과정에서, 암호문 블록 C[i]에서 1bit가 오류 → 평문 블록 M[i], M[i+1]에만 영향


-- OFB(Output Feed Back) : 암호 알고리즘의 출력이 다시 암호 알고리즘의 입력이 됨

--- C[i] = Ek( Z[i-1] ) × M[i]

--- ECB가 암호문 단독공격에 취약한걸 해결

--- CBC와 CFB의 오류전파를 제거함

--- 블록암호상에서 스트림암호를 운영할 수 있음


-- CTR(CounTeR) : IV값을 Counter로 1씩 계속 증가시킨걸, 암호화해 키 스트림을 만들어 내는 스트림 암호화

--- 블록암호상에서 스트림암호를 운영할 수 있음


7) 블록 암호공격

- 차분 공격(Differential Cryptanalysis) : 평문공격법 / 두 개의 평문블록과 이에 대응되는 암호문 블록들의 비트들의 차이를 이용해 키를 찾음

- 선형공격(Linear Cryptanalysis) : 평문공격법 / 알고리즘 내부의 비선형 구조를 선형화해서 키를 찾음

- 전수공격(Exhaustive Key Search) : 암호화할 때의 모든 경우에 대하여 조사하는 방법 / 일반적으론 불가능(경우의 수가적을 때만 가능)

- 통계적 분석(Statistical Analysis) : 많이 사용되는 단어의 빈도의 통계적 수치를 가지고 해독

- 수학적 분석(Mathematical Analysis) : 통계적 방법을 포함해, 수학적 이론을 이용해 해독


8) 인수분해 기반 공개키 암호방식

- 소인수 분해의 어려움을 이용(엄청나고 엄청난 수를, 엄청나게 큰 두 소수로 분해하는게 어려움)

- RSA(Rivest Adleman Shamir)

-- Key 생성

--- 1. 큰 소수인 p, q를 선택

--- 2. N = p x q를 계산 해, N을 구함

--- 3. φ( N ) = ( p-1 ) x ( q-1 )

--- 4. gcd( Ke, φ( N ) ) = 1이 성립하는 Ke를 구함

--- 5. Ke x Kd ≡ 1 ( mod φ( N ) )이 성립하는 Kd를 구함

--- 공개키 쌍은 ( Ke, N ), 개인키 쌍은( Kd, N )

-- 암호화 과정

--- 1. 수신자의 공개키 쌍을 가져옴( Keb, Nb )

--- 2. C ≡ M^( Keb ) ( mod Nb )로 암호문을 만들어냄

-- 복호화 과정

--- 1. 수신받은 암호문 C에 자신의 개인키로 복호화 함

--- 2. C^( Kdb ) ≡ M^( Keb x Kdb ) ≡ M^(1) ≡ M ( mod Nb )

- Rabin

-- RSA 암호방식보다 훨씬 빠름(암호화 과정이 더 단순)

-- RSA와는 다르게 공개키가 N이고, 개인키가 p, q가 됨

-- Key 생성

--- 1. 큰 소수 p, q를 선택

--- 2. N = p x q를 계산해, N을 구함

--- 공개키는 N, 개인키는 p, q

-- 암호화 과정

--- C ≡ M^( 2 ) ( mod N )

-- 복호화 과정

--- M ≡ C^( 1/2 ) (mod N )


9) 이산로그 기반 공개키 암호방식

- El Gamal

-- RSA와는 다르게, 같은 평문에서도 다른 암호문이 생성 / But, 암호문 길이가 두 배로 증가한다는 단점

-- Y = g^ ( X ) ( mod p )에서 g와 y, p를 알아도 x는 구하는건 겁나 어렵다

--- 여기서 Y와 g, p가 공개키고 X가 개인키

-- 키 생성

--- 1. (공통) 임의의 큰 소수 p와, p의 기약잉여계의 임의의 원시근 g를 선택(위수가 φ(p)인게 원시근)

--- 2. 1부터 p-1까지의 정수 하나를 개인키 X로 정함

--- 3. Y = g^( X ) (mod p )를 계산해, Y를 정함

--- 공개키는 Y, p, g, 개인키는 X

-- 암호화

--- 1. 수신자의 공개키를 가져옴(Yb, g, p)

--- 2. p의 완전잉여계에 속하는 임의의 정수 r을 하나 정함

--- 3. K ≡ Y^( r ) ( mod p )를 계산해 K를 계산

--- 4. 다음과 같은 C1과 C2를 보냄

i) C1 ≡ g^( r ) ( mod p)

ii) C2 ≡ K x M ( mod p)

-- 복호화

--- 1. 수신받은 C1과 C2를 개인키 Xb를 이용해 복호화

--- 2. C1에서 K를 구해냄

C1^( Xb ) ≡ ( g^( r ) )^( Xb ) ≡ ( g^( Xb ) )^( r ) ≡ Yb^( r ) ≡ K ( mod p )

--- 3. C2에서 평문 M을 구해냄

C2 / K ≡ M ( mod p )

- Diffie-Hellman

-- 직접 서로의 비밀키를 전달할 수 있는 대표적 방법 중 하나

--  키 교환 및 인증에 사용됨

- ECC(Elliptic Curve Cryptography ; 타원곡선 암호)

-- 아..이건 모르겠다ㅋㅋㅋ



(2) 해쉬함수와 응용

1) 해쉬 함수 일반

- 임의의 입력 비트열에 대해, 일정한 길이의 출력 비트열을 내는 것

- 해쉬 함수의 요구 사항

-- 압축 : 일정한 크기의 이진 문자열로 변환

-- 계산 용이성 : x가 주어지면 H(x)의 계산이 쉬워야 함

-- 일 방향성(One-wayness) : 해시값 y만 주어 졌을 때, y = H(x)에서 x를 찾는게 어려워야 함

-- 약한 충돌회피성 : x가 주어졌을 때, H(x) = H(x')를 만족하는 x'를 찾는게 어려워야 함(거의 불가능이 되어야 지)

-- 강한 충돌회피성 : H(x) = H(x')를 만족하는 x와 x'를 찾는건 어려워야 함


2) 전용 해쉬함수별 특징

- MD5 / SHA

-- MD5와 SHA-0 / SHA-1 / SHA-2만 알면 될듯(일단 다 긁어왔어)

http://en.wikipedia.org/wiki/Secure_Hash_Algorithm


3) 메시지 인증 코드(MAC)

- MAC(Message Authentication Code)

-- 저 위에서 메시지 인증방식으로 언급하긴함

- MAC Algorithm으로 DES나 해쉬함수를 씀

http://en.wikipedia.org/wiki/Message_authentication_code


4) 전자서명

- 전자서명(Digital Signature) : 메시지 인증 + 사용자 인증

-- 위에서 이미 다룸


5) 은닉서명

- 은닉서명(Blind Signature) : 사용자 A가, 서명자 B에게로 부터 자신의 메시지를 보여주지 않고 서명을 얻는 방법

-- 그니까, 서명을 받긴 받았는데 그게 누구 서명인지 알수는 없다는 거지

-- 어떤 특정 난수값을 메시지에 곱해서 보내기에 못 보는거지

- 메시지의 비밀성을 지키면서, 타인의 인증을 받고자 하는 경우에 주로 사용

-- 주로 전자투표?

- 하는 알고리즘은 생략


6) 이중서명

- 이중서명(Dual Signature) : SET에서 도입된 기술로 이전에 언급했음


아래는 고객이 상점으로 보내는 것

상점에서는 이중서명 / OI / PIMD / 고객의 공개키만 사용


아래는 상점이 고개으로 부터 메시지 받고 처리하는 과정

이중서명 / OI / PIMD / 고객의 공개키를 가지고 인증을하고

나머지는 Payment Gateway로 보냄(어차피 못뜯어봐 ; 금융기관의 공개키로 암호화 했기에)


Posted by 사라링
BLOG main image
.. by 사라링

카테고리

사라링님의 노트 (301)
JSP (31)
J-Query (41)
JAVA (24)
디자인패턴 (1)
스트러츠 (3)
안드로이드 (11)
오라클 (45)
우분투-오라클 (1)
이클립스메뉴얼 (6)
스프링3.0 (23)
자바스크립트 (10)
HTML5.0 (17)
정보처리기사 (1)
기타(컴퓨터 관련) (1)
문제점 해결 (3)
프로젝트 (2)
AJAX (4)
하이버네이트 (3)
트러스트폼 (11)
Jeus (2)
재무관리(회계) (5)
정규식 (5)
아이바티스 (8)
취미 (2)
소프트웨어 보안 관련모음 (0)
정보보안기사 (6)
C언어 베이직 및 프로그램 (3)
보안 관련 용어 정리 (2)
넥사크로 (6)
웹스퀘어_ (0)
Total :
Today : Yesterday :