Category Archives: Concept

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

[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
  - 데이터베이스 서버 자체를 말함