Category Archives: Concept

concept, knowledgeBase, architecture
프로젝트 진행에 필요한 개념을 설명합니다.

[Concept | Encription] 암호화 유형

암호화의 종류와 장단점을 정리하고 시스템 개발에 어떤 유형이 적용되는지 알아보자.


작성일 : 2017-03-04
수정일 : 2021-04-15

1> 암호화의 종류

유 형 특 징 종 류
단방향 해쉬함수 암호화키 없음 SHA, HAS-160, MD5
양방향 대칭키 블록암호 암호화키 == 복호화키 DES, AES, SEED, HIGHT
스트림암호 A5/1, A5/2, A5/3
비대칭키 암호화키 != 복호화키 RSA, EIGamal, 전자서명

2> 단방향 암호화 – 해쉬함수

① Encryption : 송신자는 해쉬함수를 이용해 평문을 암호화 한다.
② Transmit : 암호문을 수신자에게 전송한다.
③ Compare : 전송된 암호문과 저장된 암호문을 비교한다.
※ 암호문을 복호화 하는것은 불가능하다.

장점
* 암호화키를 사용하지 않으므로 공유절차 없이 보안을 유지할 수 있음
단점
* 복호화가 필요한 경우에는 사용이 불가능함
사용예
  사용자 개인정보를 암호화 하여 디비에 저장하고 인증시 암호화된 값으로만 비교

3> 양방향 암호화

3-1> 대칭키 암호화 (비밀키 암호화)

암호화 키를 생성하여 송신자(A)와 수신자(B)가 공유하는 방식.
① Create Private Key And Share : 암호화키를 생성하여 서로 공유한다.
② Encryption : 공유된 암호화키를 이용해 평문을 암호화 한다.
③ Transmit : 암호문을 수신자에게 전송한다.
④ Decryption : 공유된 암호화키를 이용해 암호문을 복호화 한다.

장점
* 암호화 연산 속도가 빨라 효율적으로 시스템 구축가능
단점
* 암호화 / 복호화를 위해 키가 공유되어야 하므로 노출되기 쉬움
* 키가 노출될 우려 때문에 개발 버전업 또는 일정 주기로 변경관리 해주어야 함
  (노출될 우려가 전혀 없다면 최초 생성된 키를 계속 사용하기도 함)

3-1-1> 블록 암호

고정된 크기의 블롣단위로 암·복호화 연산을 수행하며 각 블록의 연산에는 동일한 키가 이용된다. 전치와 환자를 반복시켜 암호화하면 평문의 통계적 성질이나 암호 키와의 관계가 나타나지 않아 안전한 암호를 구성할 수 있다.

3-1-2> 스트림 암호

이진화된 평문 스트림과 이진 키스트림 수열의 XOR 연산으로 암호문을 생성하는 방식으로 주기, 선형 복잡도 등 안전성과 관련된 수학적 분석이 가능하고 알고리즘 구현이 쉬운 특징이 있다.


3-2> 비대칭키 암호화 (공개키 암호화)

송신자(A)는 수신자(B)의 공개키(Public Key)로 암호화하여 전송하고 수신자(B)는 비밀키(Secret Key)로 복호화함.
① Create Key Pair And Share Public Key : 키쌍을 생성하고 공개키를 공유한다.
② Encryption : 공유된 공개키로 평문을 암호화 한다.
③ Transmit : 암호문을 수신자에게 전송한다.
④ Decryption : 자신만 알고있는 비밀키를 이용해 암호문을 복호화 한다.

장점
* 다른 유저와 키를 공유하지 않더라도 암호화가 가능함.
* 공개키로 누구나 암호화를 할 수는 있지만 송신자만 보유한 비밀키가 없으면 복원이 불가함.
* 연산이 많고 복잡하나 공개키와 비밀키를 활용한 광범위한 인증이 제공됨.
단점
* 수학적인 난제를 기반으로 설계되어 연산비용이 높아 효율성이 떨어짐.

4> 자세한 설명은 [KISA 홈페이지] 참조

[Concept | Encription] 암호화의 기본개념

시스템 개발시 악의적인 공격을 피하기 위해 암호화는 필수적으로 적용되어야 한다. 암호화의 기본적인 의미와 원리를 정리해보자.


작성일 : 2017-03-01
수정일 : 2021-04-09

1> 사전적의미의 암호화

암호화(encryption)란? 정보가 노출되는 것을 방지하기위해 특정 알고리즘을 이용하여 변형하는 것.

  • 암호화를 역행하여 다시정보를 읽게 하는 것은 복호화(decryption)라고 함.
  • 군사와 정부의 은밀한 대화를 위하여 오랫동안 이용되어 왔음.
  • 근래 기업에서는 데이터 전달개인의 정보를 저장하는데 자주 이용함.

2> 시스템 개발에서의 암호화

보안이 필요한 정보를 특정 알고리즘을 통해 의미없는 문자열(이진수 덩어리)로 바꾸는 것.

  • 악의적인 목적으로 암호를 해독해 공격하는 것을 방지할 수 있음.
  • 보안에 있어 시스템적인 보호 방법 보다 근본적인 해결방법이라 할 수 있음.

3> 암호화의 기본조건

암호화는 아래 두가지 조건을 충족해야 함.

* Confusion(혼돈) : 원문의 내용을 짐작하기 어렵게 만들어야 한다.
* Diffusion(확산) : 알고리즘의 패턴을 추론하기 어렵게 만들어야 한다.
  • 가장 좋은 암호화는 알고리즘을 알아내기 어렵게 해서 정보를 해독하지 못하게 하는 것이지만 항상 암호화 하려는 자와 복호화 하려는자의 노력이 있을뿐 100% 해독 불가능한 암호화란 있을 수 없음.

4> 고전적인 암호화

아래 설명하는 치환(Substitution)과 이동(Transposition)을 교차적용해 암호화 하였음.

4-1> 치환 (Substitution) : 단순히 다른문자로 치환하여 혼돈의 조건을 만족시킴.

4-2> 이동 (Transposition) : 무작위로(실제로는 특정규칙이 존재) 다른문자로 치환하여 확산의 조건을 만족시킴.


5> 암호화의 발전

컴퓨터의 등장으로 과거 기계식에 비해 계산능력이 월등해 졌고 그앞에서 고전적인 암호화는 무용지물이 되었다. 따라서 안전성 보완을 위해 임의의 문자열값인 암호화키(Encryption Key)를 활용하게 되었음.

5-1> 원리

암호화키와 평문(Plain Text)을 바이너리 형태로 변형한 후 배타적 논리합(XOR) 연산에 따라 암호화 및 복호화를 함.

ABA XOR B
000
101
011
110
[참고] XOR 연산

5-2> 암호화 규격

암호화키의 길이나 사용횟수가 제약이 없다면 복잡도를 무한히 증가시켜 거의 완벽한 암호화가 가능하겠지만 복호화 하는데 비용(시간소모)이 계속 커진다면 사용할 수가 없을 것이기 때문에 일정한 규격에 의한 암호화를 고려해야 함.

5-3> 양자연산

양자연산이 가능한 컴퓨팅 방식으로 인해 연산속도가 월등히 빨라진다면 위험하지 않느냐는 의문이 제기 되고는 있지만 양자연산을 통한 해독 알고리즘이 발전되기 전까지는 안전하다고 함.

5-4> 암호화의 불완전성

현재까지 주로 사용되는 방식의 암호화는 엄밀히 말하여 완벽한 안전을 보장하는 것이 아니라 현실적으로 풀기 어렵다는 조건부 안전에 의존하고 있음.

[Concept | Architecture] 3Tier

시스템 설계시 프로젝트의 목적에 따라 물리적인 계층(Tier)을 나누고 서비스를 논리적(Layer)으로 분리하게 된다. 효과적인 분업을 위해 반드시 이해가 필요한 부분이다. 1티어 / 2티어 / 3티어의 개념과 장단점을 설명한다.


Tier (계층) : 물리적인 분리단위 (서버 분리)
Layer (층) : 논리적인 분리단위 (기능 분리)

1> 1Tier

장점 : 구현이 간편함, 비용이 적게듬
단점 : 확장이 힘듬, 이관시 재구성이 필요함, 분업이 어려움


2> 2Tier

장점 : 데이터관련 변경이 용이함
단점 : 3Tier에 비해 유연성이 떨어짐


3> 3Tier

장점 : 다른계층에 의존하지 않으므로 분업시 효율적임
단점 : 구현시 고려사항이 많아 비용이 증가함

1) Client(Presentation) Tier : HTML, Javascript, CSS, Image
  - 사용자 인터페이스를 지원함
  - Frontend or GUI 라고도 불림
  - 보안상의 이점을 위해 Frontend서버를 두기도함
    (이때 Frontend서버는 단순한 것이므로 구현이 쉽고 가벼운 것을 이용)
2) Application Tier : Java, NodeJS, Python, PHP
  - 정보를 처리하는 로직이 포함되어 있음
  - Backend 라고도 불림
3) Data Tier : Oracle DB, Maria DB, Postgresql
  - 데이터베이스 서버 자체를 말함