암호의 세가지 보안 기능성은 기밀성(Confidentiality), 무결성(Integrity), 인증(Authentication)이다.
기밀성은 보안 대상을 잘 감췄다는 의미이고, 무결성은 자격 없는 자가 보안 대상을 변화시키지 않았다는 의미입니다. 인증은 어떤 사람이나 사물이 실제로 그 사람이나 그것인지 judge 하는 과정을 의미합니다.
Encryption은 좁은 의미에서 기밀성을 감추는 도구이고 넓은 의미에서 기밀성, 무결성, 인증을 하는 Crypthographic Processing으로 표현할 수 있다.
위 사진은 기본적인 암.복호화 Model 이다.
보내려는 평문을 Encrytion Key로 암호화하고 decryption key로 암호문을 복호화하여 다시 평문으로 돌린다.
암,복호화가 이렇게 쓰이는 데 이 기능이 어디에서 어떻게 쓰이고 secure할지 궁금할 것이다.
먼져 암호화가 IT 시스템에서 쓰일것이 당연한데, IT 시스템에서 보안성을 판단하는 기준을 CIA 라고 합니다.
그렇다면 CIA란 무엇일까?
CIA
위 사진과 같은 3가지 요소를 뜻하는데 위의 보안 기능성에서 설명한 기밀성,무결성은 같지만 새로 AVAILBILTY라는 요소가 보인다. AVAILBILTY는 필요될때 필요한 데이터를 제공해주는 기능을 말한다.
예를 들어 저장돼있는 외장하드(USB)를 잃어버린경우
- Confidentiality 문제는 중요한 정보가 노출될 수 있다.
- Integrity 문제는 타인이 외장하드안의 데이터를 변경가능하다
- Availbilty 문제는 사용자가 외장하드에 담긴 데이터를 사용가능하지 못하다.
이렇게 CIA 위협에 철저히 방어하기위해 즉, 안전한 시스템을 만들기 위해서는 처음만들때 부터 안전하게 만들어야 합니다. 기업 보안 수준이나 규모에 따라 보안 제품이나 solution을 addtion하는것은 바람직한 방법이 아닌것이다. 구멍 난 부분(보안 취약점)을 하나씩 메우는 것이기 때문이다.
그래서 안전한 시스템을 만들기 위해서는 처음부터 안전한게 만드는 것입니다.
자, 그렇다면 또 다른 질문이 가능하다. 안전한 시스템은 실제 어떤 식으로 구축해야하는걸까 ?
Real IT System hierachy && security system
모든 IT 시스템은 Application, System , Network 의 세 계층으로 나누어져 있다.
실제로 시스템 설계자 입장에서 완벽하게 완전한 시스템이란 이 세 계층에 보안이 잘 구현되있는 것을 말한다
- 암호화(Encryption)
- 인증 (Authentication)
- 권한 관리(Authorization)
- 취약점 탐지 (Vulnerability Assessment)
- 침해 대응 (Protection Against Threats)
- 감사(Audit/Log Events)
- 교육 및 관리( Management & Traning)
리스트로 되어있는 Security Component 는 위와 같은데 위의 7가지 보안 Component가 3계층 전체에 확실히 적용되어야 안전하게 시스템을 유지시킬 수 있다. 어느 한 계층에서 보안 요소 하나라도 문제가 생긴다면 IT 시스템 안정성은 망가진 것이다.
이제 PC유저들이 잘 아는 백신프로그램에 대해서 알아보자
위사진의 안티바이러스가 백신프로그램을 뜻한다. 그래서 백신프로그램이 3계층을 모두 보호해주는 것이 아닌것이다. 각 계층에서 데이터를 보호하기위해 네트워크보안,안티바이러스,웹보안이 적용되고 또한 암호화까지 이루어지기도 한다. 그 중에서 애플리케이션 수준에서 데이터를 잘 암호화 하는것이 효율적인 암호화 방식입니다. 왜냐하면 애플리케이션 계층이 가장 먼저 암호화 하는 계층이기도 하고 애플리케이션에서 잘 암호화해야 시스템, 네트워크를 안전하게 거쳐 지나갈수 있기 때문이다.
Encryption Model
한 사용자가 Message를 보낼 때 암호화 하는 기본 구조인데 Message를 암호화 알고리즘과 암호화 키로 암호화문을 만드는 과정이 위 사진이다. 누군가 암호문을 보았을때 Message의 정보와 키 정보를 전혀 알수 없게 하는 Encoding function이 중요하다. 그래서 원본 Message를 알아 낼수 없게 하는 것도 중요하지만 더 중요한 것은 '키 관리' 이다.
그렇다면 키 관리는 어떻게 해야할까요?
키도 데이터이므로 다시 데이터 보안의 문제가 된다. 또한 암호화를 하게 되면 생성된 키는 하나가 아니다.
암호화 키, 복호화 키 , 암호화 권한을 확인하는 키, 등등 여러개의 키가 필요하다 보니 키마다 접근 권한을 부여하고 관리하는 '체계'가 있어야 합니다.
그래서 키를 관리하는 시스템을 설계하고 그 시스템을 보안하려면 또 암호화를 수행하는 키의 암호화가 필요하다.
즉, 다음과 같은 구조이다.
이제 암호 시스템의 원리를 알아봅시다.
다시 이 사진을 가져와서 설명하겠습니다 . 도청자가 있을경우 암호문을 보고 원본 Message를 알아내려고 하거나 Key값을 알아내려고 할것입니다. 그렇다면 보안성을 높히려면 암호문에서 키 값을 알아 내기 어렵게 하는 성질을 Confusion(확산) 이라고 하고, 암호문에서 원본 메시지를 알아내기 어렵게 하는 성질이 Diffusion(확산) 이라고 합니다.
혼돈과 확산을 잘 달성했는지에 대한 여부가 암호화의 안전성을 판단하는 기준이라는 것을 기억하자
혼돈과 확산을 어떤 방식으로 달성 시키는 지에 설명하겠다.
Confusion을 달성하는 방법은 Subsitution(문자 바꿈)이라고 원문을 치환, 대치, 대체 하는 방식이고,
Diffusion을 달성하는 방법은 Permutation(순서 바꿈)이라고 원문을 전치 , 전자 , 순열 하는 방식이다.
- Subsitution - 어떤 문자를 다른 문자로 바꾸는것
- Ex) abcde -> d가Mㄴq
- Permuation - 문장 안에서 문자 순서를 바꾸는 것
- Ex) abcde -> bdeac
안전한 암호화를 하려면 최대한의 혼돈과 확산 상태를 만들어야 합니다. 그럴려면 Subsitution과 Permutation을 여러 번 반복할 수 있다. Subsitution과 Permutation을 한번 수행하는 기본 단위를 SP Network(SPN)이라고 합니다. 다음은 SPN 1 round를 나타내는 사진입니다.
DES란 암호화는 SPN을 16번 반복해서 수행하는 암호화 알고리즘입니다.
SPN 을 반복해서 구성하는 알고리즘은 보통 특정한 크기 단위(블록)로 데이터를 처리한다. 블록의 크기는 알고리즘에 따라 다양하게 나눠질수 있고 한 예로 DES는 64비트 단위로 데이터를 처리합니다.
그런데 어떤 알고리즘이 16바이트 블록 단위로 처리한단고 가정하자. 그럴 경우 16바이트 보다 큰 데이터를 처리할 경우 16바이트단위로 분할하고 16바이트를 처리하는 알고리즘이 전체 데이터를 처리할 수 있도록 별도의 동작을 만들어야 한다.
암호화해야 할 데이터를 암호화에 사용할 알고리즘이 처리하는 크기만큼자르고 자른 부분마다 알고리즘을 적용하여 그 결과물을 합하는 것이다. 이와 같이 '알고리즘이 임의의 크기를 지닌 데이터를 처리하도록 구성하는 방식' 을 운영모드(Mode of Operation) 이라고 한다.
운영모드는 단위 암호 시스템이 되고 단위 암호 시스템이 모여 전체 암호 시스템을 구성합니다.
des는 feistel구조 아닌가여
답글삭제