본문 바로가기

C#

[암호화] 용어 정리

728x90

1. 대칭형 암복호화
- AES, DES, SEED 등등 방식이 있다.
- 암호화/복호화시 key가 동일한 형태
- DES와 AES 차이
  - DES : 개인키를 사용하여 데이터를 암호화하는 방법으로서 널리 사용된다. 각 64 비트 데이터 블록에, 56 비트 길이의 키를 적용한다. 많은 회사들은 세 개의 키가 잇달아 적용되는 '트리플 DES(= 3DES = DES-EDE)'를 사용한다.
  - AES : 1998년을 기점으로 표준 기한이 만료된 DES를 대체할 블럭암호의 필요성에 따라, 만들어진 기법이다. Block 기반 암호화 알고리즘으로 일정 길이의 암호화 키 길이 제한을 가지고 있다. 이는 AES 암호화 알고리즘의 제약이다. SQLER는 손쉬운 AES의 키 길이 설정을 위해 모든 SQLER AES 2.1 버전에서 Padding 속성(일정 길이 이하일 경우 길이를 맞추기 위해 특정 문자를 자동 삽입)을 이용해 암호화 키 길이를 가변적으로 사용하실 수 있도록 구현할 예정입니다.
  => 현재는 DES 대체 방식으로 주로 AES가 사용되는 듯하다.
  - SEED : 한국에서 만든 암호화 Algorithm

2. 비대칭형 암복호화
- RSA 등등 방식이 있다.
  - RSA : 소수를 이용하여 만든 알고리즘. 공개되어 있지만 취향성이 아주 많이 없어 아주 많이 사용됨.
- 암호화/복호화시 서로 다른 key를 사용한 형태

=> 실제 메시지 암호화에는 대칭키 알고리즘을 쓴다. 이유는 속도 때문이다. 비대칭키 암호화로 긴~~~ 메시지 본문을 암호화하기에는 터무니없는 시간이 걸리기 때문이다.

3. 블럭암호화
- 임의의 평문을 암호화하기 위해서 일정한 길이로 나눠서 하는거
- ex) 기본 데이터 블럭은 16byte

4. 모드(Mode) / IV(초기화 벡터; Initialization Vector)
- 모드 : 블럭 암호화 순서 및 규칙에 대한 표준이다.
- CBC(Cipher-Block Chaining) : 일반적으로 가장 많이 쓰이는 모드. IV를 활용하여 처음 블럭이 다음 암호화 블럭에 영향을 준다.
  => 평문이 같아도 암호화 블럭이 달라진다.
- ECB : IV를 사용하지 않고, 각 블럭을 동일키로 암호화 하는 구조
  => 평문이 같으면 암호화 블럭도 일정해진다.

5. IV(초기화 벡터; Initialization Vector)
- Key와는 다르고 CBC 모드에서 체인 형식으로 앞블럭 뒤에 블럭 영향을 주도록 하는 것 같다. IV 값은 처음 시작할 때 값과 암호화 후 값을 보면 달라진다.
- 주의할 점은 IV 값을 복호화 시에 반드시 최초 값과 동일하게 해야 한다.
  - ex) IV 값을 0으로 암호화 시작했다면, 복호화시에 IV 값을 0으로 해야 한다.

6. 패딩(Padding)
- 데이터를 특정 크기로 맞추기 위해 그 크기보다 부족한 부분을 뭔가로 채워넣는 작업을 가리키는 일반 용어
- 패딩은 무조건 적용해야 한다.
- PKCS#5와 PKCS#7은 패딩에 관련된 표준이다.
  - PKCS#5 : 8바이트 기준 패딩. DES, TripleDES 등 8바이트 블럭 암호화 기반 기존 알고리즘들에 잘 적용되었던 표준이다. 그런데 16바이트 이상의 블럭 암호화 얼고리즘들이 발표되면서 이 패딩 방식에 대한 표준도 확장이 필요하게 되었다.
  - PKCS#7 : 위에 이유로 나온 표준. 암호화 블럭 크기가 k바이트인 경우 k바이트보다 작거나 같은  경우 패딩을 적용하라는 것이다. AES의 경우 16바이트 암호화 블럭이 사용되는 알고리즘이므로 16바이트 패딩이 적용된다.

7. 메시지 다이제스트(Message Digest)
- 원문에서 일정한 길이로 문자열을 변환해주는 작업(해쉬함수). 보통 사용자 암호 저장시 활용한다.
- MD5, SHA 요즘은 MD5 보완이 취양하다고 SHA-1이상 방식을 권장한다고 한다.

[출처]
https://suite.tistory.com/m/entry/%EC%95%94%ED%98%B8%ED%99%94-crypyto-%EC%9D%B4%EA%B1%B0-%EC%A0%80%EA%B1%B0-%EC%95%94%ED%98%B8%ED%99%94-%ED%95%99%EC%8A%B5-%EC%9A%A9%EC%96%B4-iv%EB%8C%80%EC%B9%AD%ED%98%95%EA%B3%B5%EA%B0%9C%ED%82%A4desaescbc - 용어 정리
https://m.blog.naver.com/PostView.nhn?blogId=magatskami&logNo=90091353680&proxyReferer=https:%2F%2Fwww.google.com%2F - DES와 AES 차이
https://m.blog.naver.com/ssod015/220271930218 - 대칭치 암호화 iv, mode, padding에 대한 용어 정리


[예제]
https://dotnetfiddle.net/bFvxp8 - AES
https://slaner.tistory.com/158 - AES
https://pcsak3.com/m/343 - DES

728x90

'C#' 카테고리의 다른 글

DI(Dependency Injection, 의존성 주입)  (0) 2023.01.25
TableLayout에서 Label Ellipsis 사용하기  (0) 2023.01.25
Command Line Argument  (0) 2023.01.23
Task cancellation  (0) 2023.01.23
Task Parallel Library에 대한 예외 처리2  (0) 2023.01.23