MAC( Message Authentication Code )

Programming/Security 2009. 12. 10. 11:30
메시지 인증에 사용되는 값인 인증자를 만드는 함수가 Symmetric, MAC, hash function 과 같이 3개의 부류로 나뉜다.

Symmetric 방식은 메시지 전체의 암호문이 인증자로 제공되며, public key 사용시 시간이 (상대적으로) 오래걸리기 때문에 Symmetric 방식을 사용 한다.
MAC, Hash function 은 시간 단축과 안전성에 근접하게 가고자 하는 방법에 속하게 된다.
MAC 은 인증자로서 적용되는 고정된 길이 값을 만드는 메시지 및 비밀키의 공개 함수이다.
Hash function 은 임의 길이의 메시지를 고정된 길이의 해쉬 값으로 대응시키는 공개 함수로서 인증자가 제공된다.

여기서는 MAC에 대해서 자세히 알아보도록 하겠다.
이 방법은 메시지 인증 코드( MAC ) 라고 하는 작게 고정된 크기의 데이터 블록을 만들기 위해서 비밀키를 사용하는 것이다. 이 기법은 A 와 B 라고 하는 두 통신 객체가 비밀키 K를 공유한다고 가정한다. A가 B로 보낼 메시지를 갖고 있을 때 메시지와 키의 함수로써 MAC을 계산한다.

송신자는 Priavte Key 를  메시지, MAC이 변경되지 않고 수신이 되었을 경우, 수신자는 송신자와 같은 방식으로 MAC을 계산하여, 메시지에 붙어 있는 MAC값과 자신이 계산한 MAC값을 비교하여 인증을 할 수 있다.

'Programming > Security' 카테고리의 다른 글

Diffie-Hellman Key Exchange  (0) 2009.12.10
RSA  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23

설정

트랙백

댓글

Diffie-Hellman Key Exchange

Programming/Security 2009. 12. 10. 09:26

1. prime number q 와 primitive root a 가 주어진다.
2. Xa, Xb ( 각자의 private key )를 랜덤으로 선택한다.
3. Ya( public key ) = a ^ Xa mod q 를 계산하여 공개키를 계산한다.
4. 그리고 서로 공개 키를 공유한다.( Ya는 B에게, Yb는 A에게 전송 )
5. Kab = Yb ^ Xa mod q = Ya ^ Xb mod q 를 각자 계산한다. ( Private Key )

'Programming > Security' 카테고리의 다른 글

MAC( Message Authentication Code )  (0) 2009.12.10
RSA  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23

설정

트랙백

댓글

RSA

Programming/Security 2009. 12. 10. 01:45
키 생성 순서

1. 두개의 소수를 랜덤으로 고른다. : p = 17, q = 11
2. n = p * q = 187
3. ∮( n ) = ( p - 1 ) ( q - 1 ) = 160
4. gcd( e, 160 ) = 1 ; choose e = 7 ; e,160 이 서로소인 e값을 선택
5. d * e = 1 mod 160 and d < 160
  d = 23, 23 * 7 mod 160 = 1.  : mod 160 에 mod 160 을 더 연산하더라도 mod 160 과 같다 는 원리를 이용

PU = { e, n } = { 7, 187 } , PR = { d, n } = { 23, 187 }


암/복호화

C(Cipher Text) = M^e mod n
M(Plain Text)   = C^d mod n



침입자는 q, a, Ya, Yb 를 알 수 있고, 이를 통해 Brute force 공격을 해서, Xa, Xb를 알아 낼 수 있다.... 이산 대수를 계산하기 어렵다고 하는데... 내 생각에 이정도 정보를 알아내면 Xa, Xb는 금방 고를 것 같은데... -_-; 당췌 머가 어렵다는 것 인지... 아우..ㅋㅋ

'Programming > Security' 카테고리의 다른 글

MAC( Message Authentication Code )  (0) 2009.12.10
Diffie-Hellman Key Exchange  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23

설정

트랙백

댓글

키 분배 시나리오

Programming/Security 2009. 10. 23. 23:04

- A는 자신과 KDC만 아는 마스터키 Ka 를 가지고 있고, B는 자신과 KDC만 아는 마스터키 Kb를 공유
1. A는 B와의 논리적 연결을 보호하기 위한 세션키 요구 메시지를 KDC에게 보낸다. 이 메세지에는 A와 B의 신원과 임시비표(nonce) 가 포함. 임시비표는 요구할 때마다 다른 값을 가지도록 해야한다.

2. KDC는 Ka를 이용하여 암호화된 메세지를 A에게 보내어 응답한다.( A가 그 메세지를 제대로 받을 수 있는 유일한 사용자 ), Ks-이 세션에 사용될 일회용 세션키, 이 응답 메세지가 A의 키 요구 메세지와 동일함을 알리기 위한 원래의 키 요구 메시지( (1)에 대한 응답이라는 것을 알림 )와 임시 비표.
E( Kb, [Ks||IDa] ) 는 B를 위한 데이터( 세션키 - 연결을 설정하기 위해)  A의 신원확인을 위한 IDa
: A는 요구 메세지가 KDC에 수신전에 변경되지 않았고, 임시비표의 사용으로 이 것이 이전 키요구메세지의 재전송이 아님을 확인 가능.( 이전에 받았어야 하는 데이터가 아니라 현재 받아야 하는 데이터가 맞음을 확인 )

3. A는 이 세션에 사용될 세션키를 저장해 놓고 KDC에게 받은 데이터를 B에 전송 - B는 접속 상대가 A이고, 세션키를 알게 되고 이 데이터가 KDC 에게 온 것임을 알수 있다.

4. 메세지 3에 대한 응답.( 암호화를 위해 세션키 사용, B가 A에게 임시 비표 보낸다 )

5. A는 B에게 f(N2) 로 응답. f는 N2를 변환하는 어떤 함수이다.

4,5는 B는 자신이 수신한 원래의 메세지(3단계)가 재전송된 것이 아님을 확인할 수 있다.
1~3단계는 키 분배, 4~5는 인증 기능을 수행.

'Programming > Security' 카테고리의 다른 글

Diffie-Hellman Key Exchange  (0) 2009.12.10
RSA  (0) 2009.12.10
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23
암호 방식( 고전적 기법 )  (0) 2009.10.23

설정

트랙백

댓글

RC4 알고리즘

Programming/Security 2009. 10. 23. 21:38
RC4는 RSA Security 를 위해 Ron Rivest에 의하여 1987년에 고안된 스트림 암호 방식이다. 이 것은 바이트 단위의 작용에 대하여 다양한 키 사이즈를 갖는 스트림 암호 방식 이다. 이 알고리즘은 랜덤 치환 사용을 기반으로 한다. RC4는 가장 널리 쓰이는 스트림 암호 방식이다. 이 방식은 웹 브라우저와 서버사이의 통신의 표준으로 규정된 SSL/TLS(Secure Sockets Layer/Transport Layer Security) 에서 사용 된다. 무선랜 표준 IEEE 802.11 의 WEP( Wired Equivalent Privacy ) 프로토콜에서 사용 된다.


(a) 1. S 항목을 S[0] ~ S[255]에 0 ~ 255까지 같은 값을 오름차순으로 정렬
     2. 임시벡터 T 생성. K 를 keylen 만큼 T에 계속해서 T가 채워질때 까지 복사를 한다.
(b) 3. j = j + S[i] + T[i] 를 i 는 0 ~ 255 까지 재계산하면서 swap을 한다.
(c) 4. i는 0 부터 시작해서 255까지 값을 증가시키며 j = j + S[j] 계산 후, Swap.
        t값 계산 후에 k = S[t]를 계산. 암호화는 k 값과 평문의 다음 바이트를 XOR연산 한다.
        복호화는 k 값과 암호문의 다음 바이트를 XOR 한다.

'Programming > Security' 카테고리의 다른 글

Diffie-Hellman Key Exchange  (0) 2009.12.10
RSA  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23
암호 방식( 고전적 기법 )  (0) 2009.10.23

설정

트랙백

댓글

블록 암호의 운용 모드

Programming/Security 2009. 10. 23. 20:34
1. 전자코드북( Electronic Code Book )
: 일정한 block을 나눠서 각각 암/복호화하여 합치기
- 평문의 동일한 64비트 블록이 두번 이상 나올 경우 항상 동일한 암호문이 생성 된다.
- 따라서, 암호키와 같이 짧은 자료에 적합하다.( DES key 를 보안상 안전하게 전송하려 할 경우 _)



2. 암호 블록 연결( Cipher Block Chaining ) 모드
: 평문 블록이 반복돼도 상이한 암호 블록을 생성할 수 있는 기법. 첫 결과가 이후 연산에 영향을 미친다.
IV( 초기화 벡터 ) 는 송수신 양자 모두가 알고 있어야 한다. 보안을 강화하기 위해 IV는 키와 같이 보호돼야 한다. 그러기 위해 IV 송신에 ECB 암호화가 이용될 수 있다.
P의 크기는 자유롭고, 각 블록에서 64비트씩 잘라서 암/복호화를 하고, 마지막 블럭이 64비트가 되지 않으면, 패딩 값을 넣어준다.


3. 암호 피드백( Cipher FeedBack ) 모드
: 암호 피드백이나 출력 피드백 모드를 사용하여 스트림 암호 방식으로 변환이 가능하다.  실시간 작동이 가능하다. 문자 스트림의 전송 중 각 문자를 문자지향 스트림 암호화를 이용하여 암호화 후 즉시 전송할 수 있다.
스트림 암호 방식의 좋은 성질은 암호문이 평문과 같은 길이 라는 것이다.
IV(초기 벡터) : 64bits 이동 레지스터
s bits : 전송 단위 ( 임의로 결정; 통상 8비트 )
Shiftregister = 64 - s bits + s bits
Pn : PlainText Block
XOR의 결과가 다음 연산의 Input
암호화 시에 C1 전송시에 문제가 생기면 이후에 모든 것이 제대로 되지 않는다.
복호화 시에 C1 전송시에 문제가 생기면 P1, P2에 문제가 생긴다.


1. 출력의 최상위 s비트( MSB )를 평 문의 첫 단위 P1과 XOR 연산하여 암호문의 첫 단위 C1이 생성되어 전송된다.
2. 이동 레지스터의 내용은 s 비트 좌측 이동되며 이때 C1이 이동 레지스터의 최하위 우측 s비트(LSB)에 채워진다.

4. 출력 피드백( Output FeedBack ) 모드
CFB와 유사하지만, XOR 연산 전의 값이 다음 연산의 Input 이 된다.
장점 : C1 전송시 에러가 나도 복원된 P1 의 값에만 영향을 미치며 다른 연산에 영향을 끼치지 않는다.( 전송중의 비트 오류가 전파 되지 않는다 )
단점 : CFB보다 메시지 스트림 변조 공격에 약하다. 암호문의 보수비트를 취하는 것은 곧 복원된 평문에 보수비트를 취하는 것이기 때문에 전송중의 비트 변경이 복원된 평문에 대하여 행해질 수 있다. 이것은 적으로 하여금 자료부는 물론 오류 검출부도 불법수정하여 오류검출 코드에 의해 발견되지 않도록 암호문을 변조 할 수 있게 한다.


5.  계수기 ( CounTeR ) 모드
: 평문 블록사이즈와 같은 계수가 사용된다. 계수기 값은 매 블록 마다 값이 틀려야 한다. 블록간의 연관성이 전혀 없다.
동시에 병렬처리가 가능해서 속도가 가장 빠르다.
Counter 와 K, Pn 는 기존에 알고 있는 값이다.

'Programming > Security' 카테고리의 다른 글

Diffie-Hellman Key Exchange  (0) 2009.12.10
RSA  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
암호 방식( 고전적 기법 )  (0) 2009.10.23

설정

트랙백

댓글

암호 방식( 고전적 기법 )

Programming/Security 2009. 10. 23. 17:29
치환 기법

시이저( Caesar ) 암호 기법
: 각 알파벳 문자를 두 문자 건너의 세 번째 문자로 치환하는 방식
평문 :   meet me after the toga party
암호문: PHHW PH DIWHU WKH WRJD SDUWB

평문 :        a b c d e f g ~
암호문자 :  D E F G H I J ~
와 같이 1:1 대응이다. 각 문자에 0 ~ 25 까지 숫자를 배정하여
C = E(p) = (p+3) mod (26 ) 로 암호화를 한다.

암호화 식
C = E(p) = (p+k) mod (26 )
P = D(c) = (c-k) mod (26)

단일문자치환( Monoalphabetic Cipher ) 암호 기법
: 각 문자는 다른 문자와 1:1 로 매칭되는 맵이 존재 한다. 이 맵에 따라 암호화 수행
map
planin : abcde ~
Cipher :DKVQF ~

Plaintext : ifwew...
Ciphertext : WIRFR...

Playfair 암호 기법
: 가장 잘 알려진 다중문자 치환 암호기법( Multiple-Letter Encryption )
 M  O   N   A   R 
 C  H  Y  B  D
 E   F   G   I/J   K
 L  P  Q  S  T
 U  V  W  X  Z

Keyword : MONARCHY
먼저 5X5 매트리스에서 키워드 값을 중복되는 알파벳을 제외하고, 차례대로 체운다.( 붉은색 )
그리고 나서, 키워드에 없는 알파벳을 차례대로 적는다.
이 매트리스를 근거로 하여 암호화를 하게 된다.
암호화 방법은
1. plaintext의  각 알파벳 쌍( 두 문자 )이 같은 문자이면, X와 같은 plaintext에 없는 임의의 문자를 삽입한다. 그리고, 쌍이 맞지 않는 경우에도 같은 임의의 문자를 삽입하여 쌍을 맞춰준다.
2. 각 쌍의 알파벳 문자를 매트리스에서 찾아서, 같은 열에 있을 경우에는 그 문자를 각 문자의 우측에 있는 문자와 치환을 한다.
3. 같은 행에 있을 경우에는 그 문자를 각 문자의 아래의 문자와 치환을 한다.
4. 서로 다른 행과 열에 있을 경우에는, 한 문자의 같은 열과 다른 문자의 같은 행의 문자를 치환한다.

암호화 PlainText : ballon
-> ba lx lo nx -> I/JB SU PM AW
복호화 I/JB SU PM AW -> BA LX LO NX -> BALLON

One-Time Pad
: 메시지와 정확히 같은 길이이고 반복되지 않는 랜덤 키 사용을 하는 방법
평문과 통계적 관계를 갖지 않는 임의의 출력을 생성한다.


전치 기법( Transposition Techniques )

Rail Fence Cipher
: 평문을 대각선으로 써 놓고 횡으로 읽어내는 방식이다.
PlainText : meet me after the toga party
CipherText: mematrhtgpryetefeteoaat

Row Transposition Cipher
: 메시지를 사각형의 행순으로 써넣고 열 순으로 읽되 열의 순서를 바꾸는 것이다.
키    : 4 3 1 2 5 6 7
평문 : a t t a c k p
         o s t p o n e
         d u n t i l t
         w o a m
x y z
암호문 : ttna aptm tsuo aodw coix knly petz

키 갯수에 따라 평문 한줄 길이를 설정하여 데이터를 채운다.

평문 뒤의 x y z 는 평문에 없는 문자중에 더미로 넣은 것이다. 복호화 할 때 이를 제거해 준다.

'Programming > Security' 카테고리의 다른 글

Diffie-Hellman Key Exchange  (0) 2009.12.10
RSA  (0) 2009.12.10
키 분배 시나리오  (0) 2009.10.23
RC4 알고리즘  (0) 2009.10.23
블록 암호의 운용 모드  (0) 2009.10.23

설정

트랙백

댓글