목록정보보안 (14)
개발자 끄적끄적
- RC4는 바이트 단위 스트림 암호로서, 평문 1바이트(8비트)와 키 1바이트가 XOR되어 암호문의 1바이트를 생성한다 - 상태(State) - RC4는 상태 개념을 사용한다 S[0]. S[1], S[2], ... , S[255] - 초기화(Initialization) //S값과 K값는 256 - 초기화는 2단계로 수행된다 for(i=0 to 255) { S[i]
- 대칭키 암호화 기법은 현대 블록암호를 기반으로 수행 - DES와 AES라고 불리는 현대 블록 암호는 고정된 길이의 텍스트 블록을 암호화하거나 복호화한다 Modes of operation 1. ECB(Electronic codebook) 2. CBC(Cipher block chaining) 3. CFB(Cipher feedback) 4. OFB(Output feedback) 5. CTR(Counter) C(N-1)=E(K)(Y) - CBC모드에서 각각의 평문 블록은 암호화되기 전에 이전 블록의 암호문과 XOR된다 - 암호화와 복호화 과정은 서로 역관계이다 - 초기벡터(Initialization Vector(IV)> - 초기벡터(IV)는 송신자와 수신자 간에 공유되어야 하지만 반드시 비밀일 필요는 없다 ..
- 2001년 미국 국립기술표준원에서 공표한 대칭키 암호 알고리즘 - AES의 선정 기준은 1. 안정성(security) 2. 비용(cost) 3. 구현 효율성(implementation) - AES는 128비트 평문을 128비트 암호문으로 출력하는 알고리즘으로 non-Feistel 알고리즘(모든 구성요소가 역이 존재)에 속한다 - 10. 12, 14 라운드를 사용하며 각 라운드에 대응하면 키 크기는 128, 192, 256비트이다 그러나 마스터 키(128, 192, 256)의 크기가 달라도 라운드 키는 모두 128비트이다 Nr 10 MixColumns -> State -> AddRoundKey -> State Note 1. One AddRoundKey is applied before the first ..
- DES의 핵심은 DES함수이다 - DES함수란 라운드 함수에 사용된 f(Rl-1, Kl)를 기리킨다 - DES함수는 32비트 출력 값을 산출하기 위하여 가장 오른쪽의 32비트(Rl-1)에 48비트를 적용한다 - DES는 2^56개의 원소로 이루어진 키 집합을 의미한다 - Rl-1는 32비트 입력 값이고, Kl는 48비트 라운드 키이기 때문에 우선 32비트 Rl-1을 48비트 값으로 확장할 필요가 있다 - 확장치환을 적용한 이후에, DES는 확장치환의 출력 값에 라운드 키를 XOR 연산한다 - 이 때, 확장치환의 출력 값과 라운드 키 값 모두 48비트이다 - 라운드 키는 이 연산에서만 사용된다 - S-박스는 실제로 섞어주는 역할을 수행한다 즉, 혼돈(confusion)역할을 수행한다(암호문과 키의 문을..
- 현대 블록암호의 중요한 구성요소는 배타적 논리합(Exclusive-Or) 연산이다 - GF(2^n)상에서의 배타적 논리합 연산의 다섯 가지 성질은 이 연산이 블록 암호에 사용될 경우 매우 흥미로운 구성요소가 된다 - 닫힘(closure) - 결합법칙(associativity) - 교환법칙(commutativity) - 항등원 존재성(existence of identify) - 역원의 존재성(existence of inverse) - 암호 알고리즘의 구성요소가 단일연산(하나의 입력과 하나의 출력)으로 표현될 수 있다면 각 구성요소에 대한 역을 설명할 수 있다 - 예를 들어, 역연산이 가능하도록 키가 없는 P-박스 혹은 키가 없는 S-박스를 만들 수 있다 왜냐하면 이들은 하나의 입력과 출력을 갖기 때문이..
- 현대 대칭키 블록 암호는 - n비트 평문 블록을 암호화 하거나 - n비트 암호문 블록을 복호화한다 - 암호화 혹은 복호화 알고리즘은 k비트 키를 사용한다 ex) 만약 인코딩 과정에서 8비트 ASCII 코드가 사용되고 64비트 블록 암호를 이용하여 암호화하기를 원한다면, 100개의 문자로 구성된 메시지는 몇 비트가 덧붙이기 되어야 하는가? Solution) 100개의 문자를 8비트 ASCII 코드로 인코딩하면 800비트의 메시지가 된다 평문은 64로 나누어야만 한다 만약 |M|과 |Pad|를 각각 메시지 길이와 덧붙이기 길이라고 한다면 |M| + |Pad| = 0 mod 64 -> |Pad| = -800 mod 64 -> 32 mod 64 - 현대 블록 암호는 대치 암호 혹은 전치 암호로 동작하도록 설..
- 암호에서는 자주 네 개의 연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 필요로한다 다시 말해서, 암호에는 체가 필요하다 - 그러나 컴퓨터에서 체에 정의된 연산을 수행할 때, 양의 정수들은 컴퓨터에 n-비트 워드들로 저장된다 - N은 보통 8, 16, 32, 63 등의 배수형태를 취한다 이것은 정수들의 범위가 0에서 (2^n)-1 까지인 것을 의미한다. 즉, 모듈러는 2^n - 따라서 체를 사용할 때는 두 가지 방법이 있다 - n-bit 워드들을 표현하는 다항식들은 두 개의 체 GF(2)와 GF(2^n)를 사용한다 - GF(2^n)의 다항식들의 집합들에 대해서, 차수 n의 다항식의 어떤 집합은 군의 모듈러로서 정의된다 - 이 경우 모듈러는 소수 다항식(prime polynomial)으로서 행동하는데 다항식은 집..
- Common algebraic structures 1. Groups 2. Rings 3. Fields - 군(Group, G)은 네 개의 성질(혹은 공리)을 만족하는 이항연산이 정의된 원소들의 집합이다 - 가환군(Commutative group)혹은 아벨군(Abelian group)은 군에 대한 네 개의 성질에 교환법칙을 추가로 만족하는 집합니다 - 닫힘(Closure) - 결합법칙(Associativity) - 교환법칙(Commutativity) - 항등원의 존재(Existence of identitiy) - 역원의 존재(Existence of inverse) - 하나의 군에는 한 개의 연산만이 정의되지만, 그 연산에 대한 성질들은 그 연산과 역함수 관계에 있는 연산의 사용을 허용한다 - ex) 정..
- 전치암호는 한 기호를 다른 기호로 대체시키지 않고 대신에 그 기호의 위치를 바꾼다 - 즉, 전치암호는 기호를 재정렬시킨다 - 과거에 사용된 간단한 전치암호는 키가 없다 ex)rail fence암호 - 키가 없는 암호는 한쪽 방향으로(예를 들어, 행 순서로) 평문을 기록하고 역 방향으로(예를 들어, 열 순서로)그것을 읽음으로써 문자를 치환한다 - 전체 암호문을 생성하기 위하여 전체 평문에 치환이 적용된다 - 다른 방법은 블록(block)이라고 하는 사전에 정의된 크기로 평문을 나눈 뒤, 각각의 블록에 독립적으로 키를 사용하여 문자를 치환하는 것이다 1. 행렬의 사용(Using Matrices) - 전치암호의 암호화/복호화 과정을 살표보기 위하여 행렬을 이용 - ex) Representation of t..
- 공격자 Eve는 항상 암호/복호 알고리즘을 알고 있다고 가정한다 - 암호의 안전성은 키의 안전성에만 바탕을 둔다 - 바꾸어 말하면, 키를 알아내는 것이 매우 어려워서 암호/복호 알고리즘을 비공개로 할 필요가 없어야 한다 - 현대 암호에서는 각각의 알고리즘의 매우 큰 키 공간(Key domain)을 가져서, 공격자가 키를 찾기 어렵게 한다 - 암호(Cryptanaly)가 비밀 코드를 생성하는 과학이자 예술인 것처럼, 암호 분석(Cryptanalysis)은 그런 코드를 깨는 과학이자 예술이다 - 암호 기술을 공부하는 것도 필요하지만, 암호 분석 기술을 연구하는 것도 필요하다 - 암호 분석 기술은 다른 사람의 코드를 깨는 데 사용되는 것이 아니라, 우리가 사용하는 암호 시스템이 얼마나 취약한지 측정하는데..
- 크기가 mXm인 정방행렬 A의 행렬식은 det(A)로 표기되며 다음과 같이 귀납적으로 계산되는 스칼라 값 1. If m = 1, det(A) = a11 2. If m>1, det(A) = 시그마 i=l...m일 때 (-1)^(i+j) * aij * det(Aij) Where Aij is a matrix obtained from A by deleting the ith row and jth column - 행렬식은 정방행렬에서만 정의된다 - 소행렬(Minor matrix) Aij - 행렬 A에서 i행과 j열의 모든 원소를 제거한 행렬 - 행렬 A의 크기가 mXm이면, 소행렬 Aij의 크기는 (m-1) X (m-1)이 된다 - 곱셈에 대한 역행렬은 정방행렬에서만 정의된다 - 암호는 잉여 행렬, 즉 모든 행..
- 앞 절에서 논의된 나눗셈 관계식 (a = q*n+r)은 두 개의 입력값 (a, n)과 두 개의 출력값 (q, r)을 가진다 - 모듈러 연산에서는 하나의 결과 값, 즉 나머지 r에만 관심이 있고 몫 q는 신경쓰지 않는다 - 이진 연산자를 모듈러 연산자라고 하고, mod로 표기한다 - 두 번째 입력값(n)은 모듈러(Modulus)라고 하고, 결과값 r은나머지(Residue)라고 한다 - 모듈러 n을 이용하는 모듈러 연산의 결과는 항상 0과 n-1사이의 정수 값 즉, a mod n의 결과값은 항상 n보다 작은 음이 아닌 정수 값이 된다 - 모듈러 연산자는 하나의 집합을 생성하는데, 모듈러 연산에서 이 집합을 모듈러 최소 잉여 집합 또는 Zn이라고 한다 - 두 정수가 합동(Congruence)임을 보이기 위..
- 암호는 정수론, 선형 대수, 대수 구조를 포함한 수학의 몇몇 특정 분야에 기반을 두고 있다 - 정수 연산에서는 집합(Set)과 몇 개의 연산을 사용 - 정수 집합 Z는 음의 무한대에서 양의 무한대까지의(분수가 아닌)모든 정수 - 암호에서는 정수 집합에 적용되는 세 가지 이진 연산을 주로 사용한다 - 이진 연산(Binary operation)은 입력값 2개에 대해서 하나의 결과값을 산출한다 - 정수에 대한 세 가지 일반적인 2인 연산은 덧셈(Add), 뺄셈(Subtract), 곱셈(Multiply) - 정수연산에서, a를 n으로 나누면, q와 r을 얻는다 이 네 정수 사이의 관계(나눗셈 관계식, Division relation)은 다음과 같다 -> a = q*n+r - 제수(Divisor)는 양의 정수..
- C.I.A - 비인가 된 접근으로부터 안전하고 - Confidentiality(기밀성) - 비인가 된 변경으로부터 보호되어야 하며 - Integrity(무결성) *무결성 : 결함이 없는 속성 - 필요할 때 권한 있는 사용자가 이용할 수 있어야 한다 - Availability(가용성) 1. 기밀성(Confidentiality) - 정보 보안에서 가장 널리 알려진 분야 - 기밀 정보는 보호되어야 한다 - 조직은 정보의 기밀성을 위협하는 악의적인 행동들에 대응해야 한다 - 군대에서, 민감한 정보가 노출되는 것은 중요한 문제 - 산업체에서, 조직의 운영을 위하여 필수적으로 경쟁자에게 정보를 숨겨야 한다 - 은행 업무를 볼 때, 고객의 계좌 정보는 보호되어야 한다 - 기밀성은 정보의 보관에만 적용되는 것이 아..