U E D R , A S I H C RSS

C로배우는암호학프로그래밍/밑줄긋기 (rev. 1.38)

C로배우는암호학프로그래밍/밑줄긋기


1. Part 1 정보보호 시스템

1.1. Chapter 02 수학적 배경

1.1.1. 2.1 정수론

  • p.24
    • 암호학에서는 정수론과 유한체 이론이 많이 사용되고 있다.
      • 정수론이 쓰이는건 알았는데, 유한체를 여기서 볼 줄은 몰랐네 - 김도엽
    • 이와 같이 b는 a로 나누어 떨어진다고 말하는 관계를 다음과 같이 표시한다.
      a|b
      
  • p.25
    • 임의의 정수 a가 있을 때 이 수는 다음과 같이 소수의 곱으로 유일하게 표시할 수 있다.
      • 모든 수는 소수의 곱으로 이루어짐을 a=p1^(e1)*p2^(e2)*...*pr^(er)와 같이 수식으로 나타냈구나 - 민규
    • 합동식 a=b mod m에 대한 정수 집합 Z상의 동치류를 표현할 때, 법 m에 대한 잉여류라고 하며 다음과 같이 표현한다.
      • 여기서 동치류란 집합 A에 대한 R이 동치 관계일 때, 집합 A의 각 원소 a와 순서쌍을 이루는 원소들의 집합이다. - 효근
        • a ={x|(a,x) ∈ R}
    • 정수 집합 Z상에는 무한히 많은 소수가 분포되어 있으나 어떠한 규칙을 가지고 분포하는지는 밝혀진 바 없다.
      • 훗날 이 소수의 규칙이 발견된다면 양자역학이 중요한 역할을 할 수 있다고 들어본 것 같다. - 석진
  • p.26
    • 이 때, 원소의 개수 ϕ(m)을 Euler의 ϕ함수 (ϕ-function) 혹은 Euler의 토션 함수(totient function)라고 한다.
      • 파이 함수를 토션 함수라고도 부르는 구나 - 민규
      • ϕ(m)에서 m이 소수일 때는 ϕ(m) = m -1이니까 페르마의 소정리를 일반화한 것이 오일러의 정리라고 말할 수 있을 것 같다. -석진
  • p.27
    • 만약 소수 p가 있고 정수 a가 p로 나누어지지 않는 수라면 다음과 같은 방법으로 a의 역수를 구할 수 있다
      • a^(p-1)을 a^(-1)*a^(p-2)로 나눠서 a^(-1)을 구하려는 거구나 - 민규

1.1.2. 2.2 유한체

  • p.28
    • 따라서 덧셈군일 때는 항등원은 '0'(영원)으로 표시하고 승산군일 때의 항등원은 '1'(단위원)으로 표시한다.
      • 승산원은 곱셈군을 의미하는건가?... - 민규
      • 자연수는 덧셈에 대한 항등원이 존재하지 않는다 -석진
  • p.29
    • 특히, 곱셈에 대한 단위원이 존재하고 영이 아닌 원소가 승산에 대하여 역원을 갖는 가환환을 체(field) F라고 정의한다.
      • 그러면 결국 "체" F 정의는 {{①닫힘 ②결합 법칙 ③항등원 ④역원} 성질을 가지는 ⑤가환군이면서 ⑥곱셈에 대한 닫힘 ⑦곱셈에 대한 결합법칙 ⑧분배법칙} 성질과 ⑨곱셈의 역원을 가지는 ⑩가환환 이라고 할 수 있는게 맞나? - 김도엽
  • p.34
    • 유클리드 알고리즘을 이용한 최대 공약수를 구하는 방법은 어떠한 음이 아닌 정수 a와 그보다 작은 정수 b가 있을 때 다음 등식에 기반한다.
      gcd(a, b)=gcd(b, a mod b)
      
      • C-style로 한 줄 코딩할 수 있음. 이걸로 gcd는 물론 lcm 구해야 할 때도 유용하게 써먹음. - 김도엽
        int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
        
  • p.34
    • 그런데 유클리드 알고리즘을 확장한 확장 유클리드 알고리즘은 두 개의 정수가 서로 소인 경우에 한 수에 대한 다른 수의 곱셈에 대한 역원을 계산하는데 사용된다
      • 유클리드 알고리즘에서의 ax+by=gcd(a,b)와 모듈러를 이용하여 역원을 구하겠구나 - 민규
  • p.35
    • 만약 두 정수 f와 f보다 작은 정수 d가 서로 소이면, 즉 gcd(f, d)=1이라면, 그때 d는 모듈러 f상에서 곱셈에 대한 역원을 갖는다. 즉, d·d^-1=1 mod f인 d^-1
      • RSA 키 만드는 과정중 비밀키 d를 만들때, ϕ(N)상에서 e의 곱셈에 대한 역원으로 d를 결정해야 함. 마침 ed≡1(mod ϕ(N))에서 이미 e를 ϕ(N)와 서로소인 정수로 결정했기 때문에 e의 곱셈에 대한 역원이 존재하므로 d를 구할 수 있는 것임. - 김도엽

1.1.3. 2.3 최대공약수 및 역수 구하기 S/W

  • p.36
    • 최대공약수 구하기(Euclid 알고리즘)
      1.    #define _CRT_SECURE_NO_WARNINGS
      
  • p.38
    • 역수 구하기(확장 Euclid 알고리즘)
      3. int Extended_Euclid(int a, int p);
      
      • 함수를 위에서 정의만 해놓고 코드 작성은 밑에서 하는 경우가 꽤 있네. 가독성이 좋아서 그런건가 - 효근
      • 가독성 맞음. main()함수를 맨 위에 올려놓고, 다른 함수들을 밑으로 내릴려면 위에서 정의를 해 놔야돼서 - 김도엽

2. Part 2 비밀 키 암호 시스템

2.1. Chapter 03 고전 암호 알고리즘

2.1.1. 3.1 대치 암호

2.1.2. 3.2 전치 암호

2.2. Chapter 04 DES(Data Encryption Standard)

2.2.1. 4.1 Feistel 암호 구조

2.2.2. 4.2 DES 구조

2.2.3. 4.3 DES의 S/W 구현

2.3. Chapter 05 AES(Advanced Encryption Standard)

2.3.1. 5.1 AES의 소개

2.3.2. 5.2 AES 구조

2.3.3. 5.3 각 라운드 함수

2.3.4. 5.4 키 확장

2.3.5. 5.5 AES의 S/W 구현

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-11-16 11:40:57
Processing time 0.0451 sec