샌드박스란

샌드박스는 외부로부터 받은 파일을 바로 실행하지 않고 보호된 영역에서 실행시켜 봄으로써 외부로부터 들어오는 파일과 프로그램이 내부 시스템에 악영향을 주는 것을 방지하는 기술입니다.

이는 외부로부터 유입되는 악성코드로부터 시스템 내 파일이나 프로세스를 보호하는 데 사용합니다. 샌드박스에서 실행되어 안전하다고 검증받은 파일이나 작업은 시스템 변경이 가능하지만, 허용하지 않은 경우에는 변경할 수 없습니다. 

기술적으로 설명하면, 외부로부터 들어온 프로그램이나 실행 파일을 가상화 내부에서 시험적으로 동작시켜봄으로써 가상화 밖으로는 영향을 주지 않습니다. 한 마디로 가상화 기술을 악성행위나 악성코드 감지 시스템에 적용한, 보안 가상화의 일종입니다. 가상화를 통한 보안은 상당히 많은 영역에서 사용되고 있습니다.
정보유출 방지 시스템에서의 SBC(Server Based Computing), VDI(Virtual Desktop Infrastructure, 데스크톱 가상화) 등이 있으며, 그리고 네트워크를 가상화한 망분리가 있습니다. 그리고 악성코드 전파 방지를 위해 샌드박스, 차폐, 악성코드 분석, 소프트웨어 테스트 등이 있습니다.

현재 샌드박스 기술은 보안 솔루션 뿐만 아니라 소프트웨어 테스트, 브라우저, 앱스토어 등 여러 분야에서 시스템 안전을 목적으로 활용되고 있습니다. 샌드박스 기술이 보안 분야에서 각광받게 된 것은 사이버 공격 기술의 발전으로 인한 기존 시그니처 기반의 탐지 솔루션의 한계 때문입니다.

시그니처 기반의 탐지 솔루션은 기존 바이러스나 악성코드들을 서버에 등록해놓고 유입되는 파일들을 일일리 대입해 검증하는 방식입니다. 악성코드의 빠른 진화와 공격 기술 발전으로, 변종 악성코드들이 하루가 다르게 발생하는 상황에서 시그니처 기반으로 한 보안 제품은 공격을 막는데 한계에 봉착하게 됩니다.

특히 특정 운영체제나 소프트웨어에서 발견된 취약점을 각 개발업체나 보안업체들이 패치하기 전에 공격에 악용하는, 일명 제로데이 공격(zero day attack)에는 속수무책일 수 밖에 없습니다. 또한 최근 공격자들은 기업 시스템이나 개인 PC에 몰래 침투한 뒤, 오랫동안 들키지 않고 기업 기밀이나 개인정보를 빼내는 경향이 많아졌습니다. 이를 APT(advanced persistent threat)라고 합니다. 이를 위해 공격자들은 기존 보안 시스템에 감지되지 않는 우회 기술들을 많이 개발해내고 있습니다. 이런 기존 감지 시스템의 한계를 극복하기 위해 보안업체들은 샌드박스 기술을 도입했습니다. 샌드박스의 역할은 유입되는 파일이나 프로그램을 곧바로 본 시스템에 들여보내는 것이 아니라 본 시스템과 유사하게 만들어진 일종의 대기실에서 해당 파일이나 프로그램을 실행시키는 것입니다.


이때 악성 프로그램이나 파일 속에 숨은 악성코드는 본래의 공격을 개시하는데 악성코드가 활동해 감염되고 침투되더라도 이 대기실만 감염되는 것입니다. 샌드박스 밖으로는 전파되지 못합니다. 각 보안업체들이 이런 샌드박스 기능이 담긴 보안 솔루션을 내놓으면서 보안 상황은 한결 좋아졌습니다. 하지만 보안 담당자들의 행복은 오래가지 않았습니다. IT 보안 공격과 방어는 창과 방패의 악순환처럼, 보안업체들이 뚫리지 않는 방패를 만들면 공격자는 이를 뚫는 창을 다시 만들어내고 이를 다시 막아내는 순환 프로세스를 반복하고 있습니다. 공격자들은 샌드박스 특유의 코드를 파악해 샌드박스를 감지해 실행을 하지 않거나 일정 시간동안 실행을 중지하는 등의 지능형 악성코드를 개발했습니다. 일정 기간 별다른 악성 행위가 없으면 본 시스템으로 이전시키는 샌드박스 기능의 특성을 이용한 것입니다. 샌드박스 방식의 보안 솔루션이 APT 공격의 주된 방패로 알려져 있지만 이렇게 우회 기술이나 회피 기술이 나왔으며, 근본적으로 샌드박스는 작업을 수행하는 데 시간이 오래 걸린다는 단점이 있습니다. 그래서 샌드박스 기능은 단독 보안 솔루션으로 사용하기보다는 시그니처 기반의 감지 솔루션, 평판 분석, 정적 분석, 웹 게이트웨이 등 여러 보안 제품과 통합, 연동을 통해 APT에 대응합니다

'보안' 카테고리의 다른 글

XSS공격이란  (0) 2017.01.16
Spoofing? Sniffing?  (0) 2016.11.09
SandBox란?  (0) 2016.07.28
AES와 SHA 차이  (2) 2016.07.21
AES  (0) 2016.07.21
Man In The Middle Attack  (0) 2016.07.19

이것저것 알아보다 보니 SHA와 AES의 차이가 무엇인지 궁금해졌습니다.. 보통 평문이나 암호화를 해야하는 부분은 AES를 사용하고 서버에서 인증서의 암호화가 필요한 부분은 SHA를 사용해 이 개념을 확실히 하기 위해 조사를 했습니다. 

Encryption(암호화)와 Hash(해쉬)의 차이

암호화는 암호화 알고리즘을 이용하고, 인증은 해쉬함수를 이용하여 Verification Data를 만들어 원문에 태그(Tag)를 붙여서 전송하므로 해쉬함수를 이용합니다. 암호화 알고리즘과 해쉬 함수의 동작 방식을 이해하면, 암호화와 인증의 차이를 이해할 수 있습니다.


위의 왼쪽 그림은 암호화 알고리즘의 동작방식을 설명한 것이며, 암호화는 기본적으로 양방향 통신을 전제로 하므로 암호화와 복호화가 가능해야 합니다. 복호화되지 않는 암호화는 의미가 없는 것입니다. 위의 오른쪽 그림은 헤쉬함수의 동작 방식을 설명한 것이며, 헤쉬는 메세지를 고정된 길의의 문자열로 변환합니다. 헤슁을 통해 생성된 Message Digest는 복호화될 필요가 없습니다. 헤쉬는 메세지마다 다른 내용의 Message Digest를 만들기 때문에 메세지의 지문(fingerprint)으로 볼 수 있습니다. 

정리하면, 암호화는 복호화를 전제로 양방향 통신을 위한 것이며, 헤쉬는 고정된 길이의 문자열을 생성하고 복호화를 할 수 없습니다.

해쉬의 이해

해쉬는 가변길이의 데이타를 고정된 길이의 문자열로 변환하는 역할을 하며, 복화화가 되지 않으므로 원문을 알수 없습니다. 대표적인 해쉬 알고리즘은 MD5 (Message Digest)와 SHA (Secure Hash Algorism)가 있습니다. 

아래그림의 왼쪽 그림은 일반적인 해쉬 과정입니다. 


일반적으로 헤쉬는 보안상의 문제가 있습니다. 원문을 해싱하여 Verification Data를 붙여서 전송하는 것이 일반적인데 전송 과정에서 누군가가 원문을 변환한 후에 Verification Data를 붙여서 수신자에게 보낸다면 수신자는 메세지의 변경 여부를 알지 못합니다. 

그래서, 위의 오른쪽 그림과 Secret Key를 추가하여 Verification Data를 생성하는 것입니다. 원문메세지에 보안키를 추가하여 Verification Data를 생성합니다. 이를 MAC (Message Authentication Code)라고 합니다. 전송과정에서 보안키를 모르는 제 삼자가 메세지를 변경하게되면 수신자는 이를 검출할 수 있습니다. MAC은 인증과 무결성을 동시에 제공할 수 있으며, 암호화에 비해 연산이 빠르다는 장점이 있습니다.  MAC은 생성 방식에 따라 다양하게 나눌 수 있는 데 IP Telephony에서는 HMAC (Hash-based MAC)을 주로 사용합니다. 

여기서 대표적인 해쉬 알고리즘인 MD5와 SHA-1에 대해 초 간단하게 살펴보겠습니다. 

MD5(Message Digest)

Rivers가 개발한 메세지 요약 알고리즘으로 큰 메세지를 압축해야 하는 전자서명 응용프로그램을 위해 개발되었으며, 최대 128 bit의 고정길이로 요약 가능합니다. 이름에서 보듯이 MD 5는 다섯번째를 의미하며, MD2는 8bit 컴퓨터를 위해 MD4와 MD5는 32bit 컴퓨터용으로 개발되었습니다. MD5는 과거에 라우터의 IOS에서 패스워드를 헤슁할 때 많이 쓰던 방식입니다. 보안이 취약하여 이제는 거의 쓰지 않습니다. 

SHA (Secure Hasj Algorism)

미국 국가 안전 보장국 (NSA)에서 개발하였습니다. 1993년에 최초 개발된 함수는 SHA-0로, 후에 SHA-0를 변형한 함수는 SHA-1으로, 그 후에 발표된 SHA-224, SHA-256, SHA-384, SHA-512를 묶어서 SHA-2 라고 합니다.  SHA-1이 가장 많이 쓰이며, TLS 및 SSL, IPSec에서 사용합니다.  SHA-0과 SHA-1는 최대 160bit의 고정길이로 요약하고, SHA-2는 사용 함수의 뒤 숫자 만큼 가능합니다. SHA는 MD5보다는 느리지만, 강화된 보안을 제공하므로 많이 사용합니다. 

헤쉬된 Verification Data 또는 MAC은 복호화가 되지 않으므로 수신자는 원문을 같은 방법으로 헤쉬합니다. 그래서 헤쉬된 값을 비교하여 결과를 확인합니다.


암호화의 이해

암호화는 크게 암호화와 복호화에 같은 키를 사용하는 대칭 암호화 (Symmetirx Encryption)과 서로 다른 키를 사용하는 비대칭 암호화(Asymmetirc Encryption)로 나누어집니다. 대칭 암호화의 대표적인 알고리즘은 DES, 3DES, AES과 있으며, 비대칭 암호화의 대표적인 알고리즘은 RSA입니다. 

대칭 암호화 알고리즘은 빠르다는 장점이 있지만, 송신자와 수신자가 같은 키를 사용해야만 하고, 기기마다 다른키를 가지고 있으며, 자주 키를 바꾸어야 하기 때문에 관리가 어렵다는 단점이 있습니다. 대칭 암호화 알고리즘은 Email,SRTP, HTTPS 등의 어플리케이션에서 많은 양의 데이타를 처리하기 위해 사용합니다.  대표적인 대칭 알고리즘인 DES와 AES에 대해 초 간단하게 살펴보겠습니다.

DES (Data Encryption Standard)

미국 NIST (미 표준 기술 연구소)에서 정한 암호이며, 키 길이가 56비트로 너무 짧고 특히나 슈퍼키가 존재할 수 있다는 의심을 받고 있습니다. 3 DES는 DES를 세번 반복하는 것입니다. DES는 이제 역사속으로 사라지는 암호화 알고리즘 입니다. 

AES (Advanced Encryption Standard)

미국 NIST에서 정한 암호이며, 32배수의 키 길이를 사용하나 128bit의 키 길이가 대세입니다. AES는 특히 무료로 공개되었기에 대부분의 보안 장비에서 사용하고 있습니다. AES는 Secure IP Telephony에서 가장 중요한 알고리즘으로 SRTP 및 Signaling 등에서 사용합니다.


비대칭 암호화 알고리즘은 너무 느린다는 단점은 있지만, 매우 안전하며, 키 관리가 단순하다는 장점이 있습니다. 따라서 적은 양의 데이타를 처리하는 데 주로 사용됩니다. 대표적인 비대칭 암호화 알고리즘인 RSA에 대해 초간단하게 살펴보겠습니다. 

RSA 

RSA는 Rivest, Shamir, Adleman라는 세명이 과학자에 의해 개발되었으며, 세 사람의 앞글자를 따서 이름을 만들었습니다. RSA의 키길이는 1024 또는 2048bit를 이용합니다. RSA는 소인수 분해를 기초로 만들어 졌습니다.  소인수분해는 하나의 숫자를 작은 소수의 곱으로 나누는 것입니다. 소인수 분해가 획기적으로 빠르게 할 수 있는 양자컴퓨터가 반들어지기 전까지는 대세 프로토콜입니다. 

일반적인 공개키(Public Key) 알고리즘은 송신자가 수신자의 공개키로 암호화하여 전송하고, 수신자는 자신의 개인키(Private Key)로 복호화하므로 개인키를 가진 한 사람만이 암호화된 내용을 확인할 수 있습니다. 그러나, RSA는 개인키로 암호화하여 공개키로 복호화할 수 있습니다.개인키로 암호화는 단 한명 만이 할 수 있고, 공개키를 가진 누구든지 볼 수 있으므로 전자서명에 활용됩니다.


 단순하게 대칭 암호화 알고리즘인 AES는 대용량 데이타를 처리하기 위해 사용하고, 비대칭 암호화 알고리즘인 RSA는 소용량 데이타를 처리하기 위해 사용합니다.

'보안' 카테고리의 다른 글

Spoofing? Sniffing?  (0) 2016.11.09
SandBox란?  (0) 2016.07.28
AES와 SHA 차이  (2) 2016.07.21
AES  (0) 2016.07.21
Man In The Middle Attack  (0) 2016.07.19
SQL Injection  (0) 2016.07.06
  1. 2018.07.13 11:43

    비밀댓글입니다

  2. ^^ 2019.03.09 18:08

    잘 읽고 갑니다~ 감사합니다~

Advanced Encryption Standard, 줄여서 AES라고 흔히 불린다. 높은 안전성과 속도로 인해 인기를 얻어 전세계적으로 많이 사용되고 있다. AES를 위한 암호화 알고리즘은 레인달 알고리즘이 뽑혔다. 이후 2001년 2월 28일, 기밀문서를 암호화 할 때, DES를 대체하여 많이 사용되기 시작되었다.

알고리즘

 AES암호화에 사용되는 단계들이다.

  • S-Box

  • ShiftRows

  • MixColumns

  • AddRoundKey

키 스케쥴다음, 가장 처음에 AddRoundKey로 CipherText를 암호화 시킨다. 그 다음, 위에 4 알고리즘을 CipherText에 적용한다. 비트크기에 따라 반복하는 수가 다르다. AES-128같은 경우는 9번, AES-192는 11번, 그리고 AES-256은 13번 반복한다. 4 알고리즘을 적용후, 마지막으로 S-Box, ShiftRows, 그리고 AddRoundKey를 적용한다.

특징

128-bit, 192-bit, 그리고 256-bit 키 길이로 처리한다. 128 비트일경우, 10 번 (마지막 라운드 함수를 포함하여) 라운드를 돌려 암호화 하고, 192 비트는 12번을 돌고, 256 비트 일경우, 14 번을 돈다.
S-Box를 간단히 설명하자면 입력 데이터를 지정된 숫자로 바꿔서 암호를 깨기 어렵게 만드는 기법이다. AES는 이걸 창조롭게 재발명하여 암호화 속도를 높이고 싶으면 S-Box를 메모리에 박아놓고, 프로그램 메모리 양을 줄이려면 실행시 S-Box를 연산으로 구해내는 기법을 사용했다. 

프로그래밍 언어

자바 : API에 java.security 패키지와, javax.crypto 패키지를 사용하여 AES 암호화를 사용할 수 있다.
C/C++ : 기본 라이브러리에는 없는 듯 하다. 3rd Party Software나, 다른 API는 구글에 검색을 해서 얻을 수 있음
C# : System.Security.Cryptography 네임스페이스와 System.Security.Cryptography.Aes 클래스를 사용하면 된다.
Python : Crypto 모듈에서 지원한다.
Go : "crypto/aes" 패키지를 이용하면 된다.

 안정성

미국 정부가 채택하여 기밀문서를 암호화를 했다. 즉, 정부가 믿을 정도라는 것이다. 그러나, 몇번은 공격을 받은듯 하다. 솔직히 AES의 알고리즘은 은근히 간단한 수학 공식이다. 암호화하는 게 쉽다고 깨는게 쉬운 건 아니지만 말이다. 물론 절대로 프로그램이나, 암호화를 공격하여 해킹을 막는 방법은 절대로 존재하지 않았고, 존재하지 않고, 앞으로도 존재할수가 없다. 다만, 공격을 하는 시간을 늘리고, 더 까다롭게 하는 것 밖에 못한다. 그러나 아직은 AES가 최강의 암호화 이고, 당장은 키없이 해독하는것을 거의 불가능하다고 믿어지고 있다. 심지어, 다른 최신 cipher 와 마찬가지로, known-plaintext 해킹기술로도 해독이 불가능 하다고 한다.

'보안' 카테고리의 다른 글

SandBox란?  (0) 2016.07.28
AES와 SHA 차이  (2) 2016.07.21
AES  (0) 2016.07.21
Man In The Middle Attack  (0) 2016.07.19
SQL Injection  (0) 2016.07.06
SHA  (0) 2016.07.06

Man In The Middle Attack (중간자 공격, MITM) 이란?

중간자 공격(man in the middle attackMITM)은 네트워크 통신을 조작하여 통신 내용을 도청하거나 조작하는 공격 기법이다. 중간자 공격은 통신을 연결하는 두 사람 사이에 중간자가 침입하여, 두 사람은 상대방에게 연결했다고 생각하지만 실제로는 두 사람은 중간자에게 연결되어 있으며 중간자가 한쪽에서 전달된 정보를 도청 및 조작한 후 다른 쪽으로 전달한다. 많은 암호 프로토콜은 중간자 공격을 막기 위하여 인증을 사용한다. 예를 들어, TLS/SSL 프로토콜은 공개 키를 기반으로 한 인증을 사용한다.

예제

갑이 을과 통신하려고 하는 상황에서, 병은 그 사이에 끼어들어 을에게 잘못된 메시지를 전달한다. 먼저, 갑이 을에게 공개키(Public Key)를 요청한다. 을이 갑에게 을의 암호 키를 보낼 때, 병이 이 사이에 끼어들 수 있다면 중간자 공격이 시작된다. 병은 갑에게 자신의 암호 키를 보내며 갑이 받은 것은 을의 암호키라고 믿게한다.

  1.    "안녕 을! 너의 암호 키 좀 줘!" → 병    
  2.    병 "안녕 을! 너의 암호 키 좀 줘!" →    
  3.    병 ← [을의 암호 키]    
  4.    ←[병의 암호 키] 병    
  5.    "버스 정류장에서 봐!"(병의 암호 키로 암호화한 암호문) → 병    을
  6.    병 "지하철 6번출구에서봐!"(을의 암호 키로 암호화한 암호문)→   을


'보안' 카테고리의 다른 글

SandBox란?  (0) 2016.07.28
AES와 SHA 차이  (2) 2016.07.21
AES  (0) 2016.07.21
Man In The Middle Attack  (0) 2016.07.19
SQL Injection  (0) 2016.07.06
SHA  (0) 2016.07.06

SQL Injection

개요

SQL 인젝션 (SQL 삽입, SQL 주입으로도 불린다) 은 코드 인젝션의 한 기법으로 클라이언트의 입력값을 조작하여 서버의 데이터베이스를 공격할 수 있는 공격방식을 말한다. 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑하지 못했을 경우에 발생한다. 공격이 쉬운데 비해 파괴력이 어마어마 하기 때문에 시큐어 코딩을 하는 개발자라면 가장 먼저 배우게 되는 내용이다. 이러한 injection 계열의 취약점들은 테스트를 통해 발견하기는 힘들지만 스캐닝 툴이나 코드 검증절차를 거치면 보통 쉽게 발견되기 때문에 탐지하기는 쉬운 편이다. 보안회사 Imperva가 2012년에 발표한 보고서에 따르면 월 평균 4회 가량의 SQL 인젝션 공격이 일어난다고 한다. OWASP에서도 수년동안 인젝션 기법이 보안 위협 1순위로 분류되는 만큼 보안에 각별한 주의가 필요하다.

예제

로그인 폼에 아이디와 비밀번호를 입력하면 입력한 값이 서버로 넘어가고, 데이터베이스를 조회하여 정보가 있다면 로그인에 성공하게 된다. 이때 데이터베이스에 값을 조회하기 위해 사용되는 언어를 SQL이라고 하며 다음과 같이 생겼다고 가정하자.

SELECT user FROM user_table WHERE id='입력한 아이디' AND password='입력한 비밀번호';

(여기서는 패스워드를 평문으로 비교하는데 사실 이는 예제를 간단히 하기 위한거고 실제로 이런 식으로 짜면 개인정보보호법 29조 위반으로 과태료 폭탄을 맞을 수 있다. 패스워드는 반드시 SHA-256이상(SHA-512나 SHA-3 권장)의 보안성을 가지는 해시 함수로 해싱해야 한다. )

일반적인 유저 아래와 같이 정보를 입력하여 로그인 한다.

SELECT user FROM user_table WHERE id='일반' AND password='사용자';

여기서 악의를 품은 사용자가 아래와 같이 로그인 할 수 있다.

SELECT user FROM user_table WHERE id='악의' AND password=' ' OR '1' = '1';

비밀번호 입력값과 마지막 구문을 자세히 살펴보자. 따옴표를 올바르게 닫으며 password= '를 만들어 버림과 동시에 SQL 구문 뒤에 OR '1' = '1'을 붙였다. WHERE 뒤에 있는 구문을 간단히 축약하면 false AND false OR true로 정리할 수 있는데, 논리학에 따르면 AND 연산은 OR보다 연산 우선순위가 빠르기 때문에 해당 구문 전체는 true가 되어 올바른 값으로 판단하고 실행하게 된다. 즉 아이디와 비번을 제대로 매치하지 못했어도 ' OR '1' = '1''' 구문 때문에 로그인에 성공하게 되는 것이다.

위 구문으로 로그인 뿐만 아니라 JOIN이나 UNION같은 구문을 통해 원하는 코드를 실행하게 할 수도 있다.

방어방법

아마도 XSS와 상당부분 겹치겠지만 기본적으로 유저에게 받은 값을 직접 SQL로 넘기면 안 된다. 요즘에 쓰이는 거의 모든 데이터베이스 엔진은 유저 입력이 의도치 않은 동작을 하는 걸 방지하는 escape 함수와 prepared statement 를 제공한다. prepared statement 자체 내에 escape가 내장돼서 한 겹 감싸진 형태.

또한 DB에 유저 별로 접근 권한과 사용 가능한 명령어를 설정하면 최악의 경우에 SQL injection에 성공하였다고 하더라도 그나마 피해를 최소화 할 수 있다. 혹자는 SQL injection은 데이터베이스 스키마를 알아야 가능한 공격기법이라고 하지만 그 스키마 자체를 SQL injection으로 알아낼 수가 있다. 그리고 데이터베이스를 변조하려는 게 아니라 파괴하려는 거라면 와일드카드를 사용해서 그냥 싹 다 지워버리는 공격이 가능.

DB엔진별로 문법이 다 다르기 때문에 개발자가 그걸 다 고려해서 코딩하는 방법은 매우 비추천된다. 엔진에서 제공하는 prepared statement를 사용하는 게 최선. escape_string같은 함수를 사용하면 몇몇 군데에서 빼먹거나 하는 실수로 보안 구멍이 생길 수 있다. 그리고 prepared statement는 사용 전에 일부 컴파일돼서 DB쿼리를 가속시켜주므로 적극적으로 사용하자.

추천되는 방어법은 클라이언트측 자바스크립트로 폼 입력값을 한 번 검증하고, 서버측은 클라이언트측 필터가 없다고 가정하고(공격자가 자바스크립트를 꺼버리면 그만) 한번 더 입력값을 필터한다. 이때 정규표현식으로 필터하는게 가장 강력하고 좋다. 그 다음 SQL 쿼리로 넘길 때 해당 파라미터를 prepared statement로 입력한다. 다음, 쿼리의 출력값을 한번 더 필터하고(XSS 공격 방어의 목적이 강하다) 유저에게 전송한다. 이렇게 하면 해당 폼에 대해서는 SQL injection공격이 완전히 차단된다. 물론 이것이 공격 기법의 전부가 아니므로(스푸핑이나 맨 인 미들 공격, 키로거 등 아직 많다) 정보 유출에 민감한 사이트를 운영할 생각이라면 보안 회사에 컨설팅을 꼭 받아야 한다.

'보안' 카테고리의 다른 글

SandBox란?  (0) 2016.07.28
AES와 SHA 차이  (2) 2016.07.21
AES  (0) 2016.07.21
Man In The Middle Attack  (0) 2016.07.19
SQL Injection  (0) 2016.07.06
SHA  (0) 2016.07.06

SHA란?

SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다. 이들 함수는 미국 국가안보국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정되었다. SHA 함수군에 속하는 최초의 함수는 공식적으로 SHA라고 불리지만, 나중에 설계된 함수들과 구별하기 위하여 SHA-0이라고도 불린다. 2년 후 SHA-0의 변형인 SHA-1이 발표되었으며, 그 후에 4종류의 변형, 즉 SHA-224SHA-256SHA-384SHA-512가 더 발표되었다. 이들을 통칭해서 SHA-2라고 하기도 한다.

SHA-1은 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다. SHA-1은 이전에 널리 사용되던 MD5를 대신해서 쓰이기도 한다. 혹자는 좀 더 중요한 기술에는 SHA-256이나 그 이상의 알고리즘을 사용할 것을 권장한다.

SHA-0과 SHA-1에 대한 공격은 이미 발견되었다. SHA-2에 대한 공격은 아직 발견되지 않았으나, 전문가들은 SHA-2 함수들이 SHA-1과 비슷한 방법을 사용하기 때문에 공격이 발견될 가능성이 있다고 지적한다. 미국 표준 기술 연구소(NIST)는 SHA-3로 불리는 새로운 암호화 해시 알고리즘에 대한 후보를 공모하였다.

SHA 함수군

최초의 알고리즘은 1993년에 미국 표준 기술 연구소(NIST)에 의해 안전한 해시 표준(Secure Hash Standard, FIPS PUB 180)으로 출판되었으며, 다른 함수들과 구별하려 보통 SHA-0이라고 부른다. 얼마 안 있어 NSA는 이 표준을 폐기했고, 1995년에 개정된 알고리즘(FIPS PUB 180-1)을 새로 출판했으며 이를 SHA-1이라고 부른다. SHA-1은 SHA-0의 압축 함수에 비트 회전 연산을 하나 추가한 것으로, NSA에 따르면 이는 원래 알고리즘에서 암호학적 보안을 감소시키는 문제점을 고친 것이라고 하지만 실제로 어떤 문제점이 있었는지는 공개하지 않았다. 일반적으로 SHA-1은 SHA-0보다 암호학적 공격이 힘든 것으로 알려져 있으며, 따라서 NSA의 주장은 어느 정도 설득력이 있다. SHA-0과 SHA-1은 최대 264비트의 메시지로부터 160비트의 해시값을 만들어 내며, 로널드 라이베스트가 MD4 및 MD5 해시 함수에서 사용했던 것과 비슷한 방법에 기초한다.

NIST는 나중에 해시값의 길이가 더 긴 네 개의 변형을 발표했으며, 이들을 통칭하여 SHA-2라 부른다. SHA-256, SHA-384, SHA-512는2001년에 초안으로 처음으로 발표되었으며, 2002년에 SHA-1과 함께 정식 표준(FIPS PUB 180-2)으로 지정되었다. 2004년 2월에 삼중 DES의 키 길이에 맞춰 해시값 길이를 조정한 SHA-224가 표준에 추가되었다. SHA-256과 SHA-512는 각각 32비트 및 64비트 워드를 사용하는 해시 함수이며, 몇몇 상수들이 다르긴 하지만 그 구조는 라운드의 수를 빼고는 완전히 같다. SHA-224와 SHA-384는 서로 다른 초기값을 가지고 계산한 SHA-256과 SHA-512 해시값을 최종 해시값 길이에 맞춰 잘라낸 것이다.

크기비교

알고리즘해시값 크기내부 상태 크기블록 크기길이 한계워드 크기과정 수사용되는 연산충돌
SHA-0160160512643280+,and,or,xor,rotl발견됨
SHA-1160160512643280+,and,or,xor,rotl공격법만 존재
SHA-256/224256/224256512643264+,and,or,xor,shr,rotr-
SHA-512/384512/38451210241286480+,and,or,xor,shr,rotr-

예제

다음은 SHA-1 해시값의 예제이다.

SHA1("The quick brown fox jumps over the lazy dog")
  = 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

해시값은 눈사태 효과 때문에 메시지가 조금만 바뀌어도 완전히 바뀔 수 있다. 다음 예시는 위의 예제 끝에 마침표(.)를 찍은 것이다.

SHA1("The quick brown fox jumps over the lazy dog.")
  = 408d94384216f890ff7a0c3528e8bed1e0b01621

빈 문자열의 해시는 다음과 같다.

SHA1("") = da39a3ee5e6b4b0d3255bfef95601890afd80709


'보안' 카테고리의 다른 글

SandBox란?  (0) 2016.07.28
AES와 SHA 차이  (2) 2016.07.21
AES  (0) 2016.07.21
Man In The Middle Attack  (0) 2016.07.19
SQL Injection  (0) 2016.07.06
SHA  (0) 2016.07.06

+ Random Posts