베라크맆트

From Hidden Wiki
Jump to navigation Jump to search

개요

베라크맆트(VeraCrypt)는 트루크맆트(TrueCrypt)의 소스 코드로 만든 오픈 소스 소프트웨어이다. 트루크맆트처럼 리눅스, 맥OS, 윈도우즈를 모두 지원하다. 현재 트루크맆트는 업데이트가 중단되었으니 베라크맆트를 사용하는 게 보안상 더 안전하다.


베라크맆트로 데이터 암호화를 할 때 비밀번호만 사용 시 비밀번호를 20자리 이상으로 만들 것을 권장합니다. 비밀번호만 사용하는 것은 권장하지 않습니다. 20자리 이상의 비밀번호와 키파일을 함께 사용하면 더 좋습니다.


키파일(keyfile)을 보관할 암호화 볼륨의 크기는 300 ~ 500 KB 크기로 만들면 되고, 이름도 일반 파일처럼 위장하여 숨겨놓는 편이 좋다. 공인인증서의 개인 키(private key)도 베라크맆트로 암호화한 볼륨에 넣어놓고 사용하면 안전하다. 볼륨 삽입시 은행의 공인인증서 프로그램이 USB 메모리 스틱으로 인식한다.


개인적인 사진이나 회사 문서 등을 USB 메모리 스틱 등의 분실하기 쉬운 매체에 담아 옮길 때도 암호화한 볼륨에 넣어서 운반하면 분실해도 안전하다. USB 메모리에 베라크맆트 실행 파일을 같이 갖고 다니면 더 편하다.


VeraCrypt는 윈도우즈 C 드라이브 암호화를 BIOSMBR만 지원했다. 그러나 2016년 8월 17일 출시된 1.18a 버전부터 UEFIGUID 파티션 테이블(GPT)도 지원한다.


TrueCrypt의 또 다른 포크(fork)로는 싸이퍼셰드(CipherShed)라는 게 있지만, 사용성이 별로 좋지 않다.


외장 HDD

외장 HDD는 별도의 전원이 필요한 3.5인치보다는 USB 전원만으로 작동하는 2.5인치 이하가 좋다.


웬만하면 1TB짜리 2.5인치 HDD 하나 사라. 그게 장기적으로 좋음. 그래서 베라크맆트로 암호화해서 쓰면 됨.

컴퓨터랑 연결은 별도의 외장 HDD 케이스 살 필요 없고, 그냥 컨버터로 USB 전원으로 쓰는 게 편함. 별도 외부 전원 연결하려면 귀찮음.

3.5인치 HDD는 외부 전원 없으면 작동 안 하는 게 많고, 2.5인치는 대부분 USB 전원만으로 작동함. 1.8 인치는 가격이 비싸서 못 쓰고. 3.5인치도 USB 플러그 2개 꽂으면 작동하는 것들도 많다.


LANstar USB3.0 to SATA HDD/SSD 컨버터/USB 보조전원/2.5형/3.5형 HDD/SSD를 연결하여 외장하드로 사용/5Gbps 전송속도

10,700원

https://smartstore.naver.com/dpk/products/2913792262


Coms USB3.0 컨버터(HDD용/SATA3) USB보조전원/BE490/2.5 HDD/SSD 보관용 케이스/5Gbps전송속도/케이스측면에 바로 연결 사용가

14,250 원

http://shopping.interpark.com/product/productInfo.do?prdNo=3196861966


BE490 Coms USB 3.0 컨버터(HDD용 SATA 3). USB 보조전원 HDD연결 하드연결 사타3연결 외장하드연결 외장하

15,270원

http://www.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=2105481883


외장 HDD 케이스를 사는 것보다 그냥 케이블형 컨버터만 사서 연결하는 게 여러개의 외장 HDD를 사용하기 편하다. 또한 별도의 외부 전원이 들어가는 제품보다 USB 전원으로 작동하는 쪽이 편하다.

일반적으로 HDD에 꽂는 쪽은 SATA랑 전원 플러그가 하나로 합쳐져있고, 컴퓨터(랲탚이나 데스크탚)에 꽂는 쪽은 2개의 USB 플러그가 있다. 하나는 "데이터&전원"이고, 다른 하나는 혹시 전력이 모자랄 경우 보충해 줄 "보조 전원"이다.

http://xnw55ym75bfpxkzs.onion/res/405.html

한글 깨짐

주의 (2018.01.15)

VeraCrypt가 여러 운영체제를 지원하긴 하지만 주의해야할 점이 있다. 윈도에서 만든 볼륨, 특히 DOS타입으로 볼륨을 만들고 파일명을 한글로 생성할 경우 리눅스에서 마운트한 뒤 확인하면 파일명이 모두 깨져보인다. 이는 DOS타입으로 파일명을 생성하면 한글의 인코딩 셋이 EUCKR이기 때문으로 보인다.

http://blogger.pe.kr/638


이건 FAT으로 볼륨을 만들었을 때를 얘기하는 것 같다. 아마 NTFS로 볼륨을 만들면 이런 문제가 없을 것 같다.

http://xnw55ym75bfpxkzs.onion/res/405.html

다운로드

소스 코드 및 프로그램은 아래 링크들에서 다운로드받을 수 있다.

https://www.veracrypt.fr/en/Home.html

http://sourceforge.net/projects/veracrypt/

https://veracrypt.codeplex.com/


만약 정부에 의해 위 링크가 막힌다면 아래 파일 공유 사이트에서 다운로드받는다.

http://www.share.az/mpbovv227mwo/veracrypt_1.16_Source.tar.bz2.html

http://www.share.az/pzys4fhoymui/veracrypt_1.16_Source.zip.html

Salt

레인보우 테이블(rainbow table)과 salt에 대해서는 쏠트 문서 참조.


알고리듬

암호화 알고리듬(encryption algorithm)은 AES, Serpent, Twofish, Camelia, Kuznyechik을 지원한다. AES는 미국 정부 표준이며, Serpent와 Twofish는 AES 선정 당시 최종까지 후보로 남아있었다. Camelia는 일본에서 개발됐고, Kuznyechik은 러시아 정부 표준이다.

해시 알고리듬(hash algorithm)은 SHA-512, Whirlpool, SHA-256, Streebog를 지원한다.

SHA-256은 NSA에 의해 개발되어 NIST(미국 국립표준기술연구소)에 의해 배포되었다. 2001년에 공개되었으며 256비트의 키를 만든다. SHA-512도 256과 동일하지만 키 파일 크기가 512 비트이다.

Whirlpool은 2000년도에 Vincent Rijmen(AES의 공동 개발자)과 Paulo Barreto에 의해 개발되었으며 512비트의 키를 만든다.

Streebog는 러시아 정부 표준이며 256비트나 512비트 키를 만들지만 베라크립트에서는 512비트 키만 만든다.

PIM

PIM(personal iterations multiplier)은 무작위 대입 공격(brute force attack)을 방어하기 위하여 사용한다.


PIM을 사용하려면 볼륨(volume)을 만들 때 Use PIM을 체크하면 된다. 그러면 다음 페이지에서 Volume PIM 숫자를 입력한다. 이 PIM 숫자는 마운트 때마다 입력해야 하므로 외워놔야 한다. 0을 입력하면 기본 반복 횟수인 485회를 하게 된다. 485회보다 많으면 브루트 포스로 암호를 깨기는 힘들어지지만 마운트에 시간이 오래 걸리고, 485회보다 적으면 마운트는 빨리 되지만 브루트-포스 공격에 취약해진다.[1] 비밀번호가 20자리 이상이어야 그나마 PIM을 하지 않아도 어느정도 안전하다.


PIM 값을 설정하지 않을 경우 시스템 파티션의 경우 HMAC-SHA-256는 200,000번, HMAC-RIPEMD-160는 327,661번 반복한다. 일반 컨테이너(볼륨 파일)의 경우 HMAC-RIPEMD-160은 655,331번, HMAC-SHA-512, HMAC-SHA-256과 HMAC-Whirlpool은 500,000번 반복한다.[2] 시스템 파티션 암호화시 PBKDF2-RIPEMD160을 1,000번 반복해서 사용하고, 일반 컨테이너(볼륨 파일)와 비시스템 파티션에선 최대 2,000번 반복해서 사용하는 트루크맆트와 비교해보면 200배 이상 많이 반복해서 사용한다.


만약 PIM 값을 설정할 경우 시스템 파티션의 경우 PIM x 2048번을 반복하고, 비-시스템 파티션이나 파일 컨테이너의 경우 15000 + (PIM x 1000)번을 반복한다. 20자 미만의 비밀번호의 경우 PIM 값은 98(시스템 파티션의 경우) 또는 485(비시스템 파티션이나 파일 컨테이너의 경우) 이상이어야 하며 20자 이상의 비밀번호의 경우 1만 설정해도 된다.


베라크맆트가 반복 횟수를 늘려서 무작위 대입 공격(brute-force attack)이나 사전 공격(dictionary attack)에 강해진 건 좋은데 트루크맆트에선 0.1초면 끝나던 암호화 볼륨의 마운트가 수십초가 걸리는 건 심각한 문제이다. 심지어 기본 값 이하로는 PIM 값을 설정하지도 못 하여 트루크맆트처럼 빠르게 마운트할 수도 없다. 차라리 트루크맆트를 쓰면서 비밀번호를 20자 이상으로 설정하고, 키파일을 함께 사용하는 게 더 나아보인다.


암호화할 때 끼워넣어 해독을 어렵게 만드는 문자열인 솔트(salt)도 트루크맆트보다 베라크맆트에서 더 강력하게 지원한다.


트루크맆트는 시스템 파티션 암호화시 PBKDF2-RIPEMD160 알고리듬을 1,000번 반복해서 사용한다. 일반 컨테이너(볼륨 파일)와 비시스템 파티션에선 최대 2,000번 반복해서 사용한다.[3]


베라크맆트는 이 변환 과정을 강화했다. 베라크맆트는 시스템 파티션에 대해 PBKDF2-RIPEMD160 알고리듬을 327,661번 반복하고, 일반 컨테이너와 다른 파티션들엔 RIPEMD160의 경우엔 655,331번, SHA-2(안전한 해시 알고리듬)와 Whirlpool의 경우 500,000번 반복한다.


이 변환 과정이 베라크맆트가 암호화된 파티션을 여는 작업을 느리게 하지만, 이 작업은 베라크맆트를 트루크맆트에 비해 무작위 대입 공격(brute force)에 대해 10~300배 강하게 만들어 준다.(트루크맆트는 볼륨을 마운팅하는데 0.1초 정도 걸리는데 베라크맆트는 훨씬 오래 걸린다고 한다.[4] 그래도 버전 업이 빨리 되고 있으니 현재는 많이 개선되었을 것이다.)


사용방법

트루크맆트와 동일하니 트루크맆트 문서를 읽어보기 바란다.

간혹가다 볼륨을 마운트할 때 ‘장치가 준비되지 않았습니다’와 같은 오류가 뜨는 경우가 있는데, 이 때는 명령 프롬프트를 관리자 권한으로 실행한 다음 ‘mountvol /e’를 치고(따옴표 제외) 엔터를 누른 후 재부팅을 하면 해결된다.

TrueCrypt Mode

예전에 TrueCrypt에서 만든 암호화 볼륨을 VeraCrypt에서 열려면 TrueCrypt Mode를 체크하고 마운트해야 한다.

숨김 볼륨

숨김 볼륨(Hidden vloume)의 경우 제 3자가 숨김 볼륨의 존재를 알 수 있는 방법이 없다. 즉, 외부 볼륨에 적당한 암호를 걸어놓고, 적당한 파일을 숨겨놓으면 숨김 볼륨의 존재를 부인하더라도 입증할 방법이 없다.


볼륨은 파일 저장소로 리눅스에선 FAT과 EXT 2, 3, 4 이렇게 4가지 종류를 쓸 수 있고, 윈도우즈에선 NTFS와 FAT을 사용할 수 있다. 둘 다 장단점이 있는데 FAT은 4GB 이상의 파일은 인식할 수 없으며 NTFS는 외부 볼륨 크기의 반 이하 크기의 숨긴 볼륨만 만들 수 있다.(NTFS는 파일을 저장 공간의 중앙에서부터 저장하기 때문에 나머지 절반 정도의 크기에만 숨긴 볼륨을 만들 수 있다.)


외부 볼륨에는 히든 볼륨을 만들기 전 추가한 파일 외에는 나중에 파일 추가를 안 하는 게 좋다. 숨김 볼륨 영역을 덮어써서 숨김 볼륨을 파괴할 수 있기 때문이다. 외부 볼륨에는 보여주기용으로 불법은 아니지만 민감한 파일을 넣어놓으면 된다.

숨김 볼륨 보호(Hidden Volume Protected) 기능을 사용하면 숨김 볼륨에 파일을 덮어씌우는 걸 막을 수 있다는데 이걸 쓰면 히든 볼륨을 사용함으로써 얻으려고 했던 부인 능력을 훼손하므로 최신 버전에서는 해당 기능이 빠졌다고 생각된다. 파일을 볼륨에 꽉 채워서 복사하려고 했을 때 거절한다면 히든 볼륨이 있다는 증거가 되기 때문이다.


동일한 볼륨 파일에 대해 외부 볼륨이나 숨김 볼륨, 둘 중 하나만 마운트(mount)시킬 수 있으며 마운트시 입력하는 비밀번호에 따라 어떤 볼륨이 삽입될지가 결정된다.


몇 백GB짜리를 생성하는 데 몇 시간씩 걸리는 외부 볼륨과는 달리 숨김 볼륨(hidden volume)은 생성에 1초 이하의 시간만 걸린다.


동적 보관소(dynamic container)에는 숨김 볼륨을 만들 수 없다.

키파일

비밀번호비밀단어(password)나 비밀구(passphrase)만 사용하는 것보다 키파일(keyfile)도 같이 사용하는 게 훨씬 안전하다.


리눅스

설치의 경우 압축 파일의 압축을 푼 후 터미널에서 해당 폴더로 들어간 후

./veracrypt-1.16-setup-gui-x64

하면 된다.(64비트일 경우)

실행은 터미널에서

veracrypt

하면 된다.

우분투의 경우 런처에 고정시켜놓고 쓰면 된다.


리눅스의 경우 만약 볼륨의 소유주가 root여서 볼륨에 대한 권한이 없어서 작업이 안 되면

sudo nautilus

한 후 노틸러스(파일 관리자)의 해당 볼륨에서 마우스 오른쪽 버튼을 누른 후 속성의 권한에서 그룹을 자신의 리눅스 계정으로 바꾸고 "파일 만들기 및 삭제" 권한으로 변경하면 된다.


리눅스에선 윈도우즈용 베라크맆트 및 트루크맆트의 동적 보관소(dynamic container. 파일을 넣을 때마다 확장되는 볼륨 파일. 실제 파일의 크기만큼만 HDD의 공간을 차지한다.) 기능을 쓸 수 없다.


또한 리눅스에선 암호화 볼륨 생성시 빠른 포맷(quick format. 파티션의 정보 부분만 다시 쓰고, 나머지 영역은 그냥 놔두기 때문에 0.1초면 끝난다.[5] 대신 암호화 이전에 HDD에 있던 데이터는 파일 복구 툴로 쉽게 복구할 수 있다. 1 TB정도되는 암호화 볼륨을 일반 포맷으로 생성할 경우 몇 시간정도 걸린다.) 기능을 사용할 수 없다.


위험

Tor + 노스크립트 + veracrypt c드라이브 외부저장장치 암호화 한 상태에서 포렌식에 걸려서 경찰에 잡힌 사례들어본적 있어? 그냥 궁금함 ㅇㅇ 답변해주면 진심으로 감사드림.

전원 끄고 몇초 동안 메모리에 남아있는 개인키해독한 적은 있음.

미국에서 포렌식은 실패했지만 배심원들이 정황 증거만으로 유죄 판결 때린 적도 있음.

진짜로? 메모리에 남은 개인키로 해독이 가능하다고? 그거 전원 끄면 바로 휘발되는거 아닌가

저정도 기술력은 남한 경찰한테는 없을 것 같고, FBI같은데서나 쓸 것 같다. FBI도 사실상 쓰기 힘들어. 문 부수고 들이닥치는데 10초는 걸리거든.

전원 끄고 10초 정도 안에 메모리에 든 내용을 보존하지 않으면 다 날아가니까.

전원 꺼도 메모리 내용이 즉각 날아가지 않고 몇초 정도 남아있다.

다크웹 어디 운영자 새끼도 30자리 넘는 비번 자기가 FBI한테 가르쳐 줌. 다른 증거가 이미 많아서 비번 안 가르쳐주면 형량이 더 세게 나올 경우 자기 입으로 부는 경우도 많음.

운영자야 서버 해킹 당하거나 하는 등 일반 사용자보다 위험하니까 일반 사용자한테는 상관 없는 얘기지만.

램 카피 뜨는 장비 들고 가서 문 부수고 들어간 다음

램 뽑아서 장비에 꽂는 식인가?

관련 링크 있냐? 궁금하다

http://c2djzrn6qx6kupkn.onion/res/38305.html

영하 50도로 냉각하면 메모리에 데이터가 몇 분은 남아있다.

Cold boot attack

콜드 붙 어탴(cold boot attack)으로 불리는 방법이 있다. 급속 냉각 스프레이로 냉각 후 메모리 내용을 덤프(dump) 떠서 다른 곳으로 옮긴 후 내용을 분석한다. 경찰이 들이닥쳤을 때 잽싸게 컴퓨터 전원을 내려버렸을 때 베라크맆트 등의 개인 키와 비밀번호가 아직 메모리에 남아있을 때 사용할 수 있다.

설령 컴퓨터 전원을 내렸어도 경찰이 몇 초 안에 문 부수고 들어와서 급속 냉각 스프레이로 영하 55도씨로 메모리 온도 떨구고 메모리 덤프 뜨면 메모리에 있던 개인키랑 비밀번호로 암호화 해제 할 수 있지.


  • Memroy Analysis[1]

http://gflow-security.tistory.com/entry/Memroy-Analysis1

  • 기상천외한 해킹법, 수사에 활용할 수는 없을까?

http://blog.daum.net/spogood860/454

  • [논문리뷰] 메모리 포렌식, 아직도 가야할 길

https://cpuu.postype.com/post/1149394


  • Lest We Remember: Cold Boot Attacks on Encryption Keys

영하 50도면 메모리에 데이터가 몇 분은 남아있다.

https://www.usenix.org/legacy/event/sec08/tech/full_papers/halderman/halderman_html/


  • 급속냉각스프레이 FRE400

HFC(hydrofluorocarbon)를 냉매(refrigerant)로 사용하여 -55도씨로 급속 냉각

400mL 20,900원

http://www.wyeshop.co.kr/shop/shopdetail.html?branduid=134068


요즘은 하드 디스크 드라이브(HDD) 대신에 솔리드 스테이트 드라이브(SSD)도 많이 쓰므로 SSD 보안 관련 내용은 덤으로 넣었다.

  • SSD 포렌식:데이터 복구 (SSD Forensics:Data Recovery)

http://forensic-proof.com/archives/3221

암호화를 했어도 유죄 판결이 나올 수 있다

증거의 종류에는 물증심증이 있으며, 물증에는 직접 증거간접 증거가 있다. 심증만으로는 유죄 판결이 나오지 않지만, 간접증거는 유죄 판결근거가 될 수 있다.

경찰암호화된 데이터의 복호화(암호화 해제)에 실패했다고 해도 정황 증거(간접 증거)가 강력하면 감옥에 갈 수 있다.


  • Child porn suspect jailed indefinitely for refusing to decrypt hard drives

Apr 27, 2016

Man to remain locked up "until such time that he fully complies" with court order.

A Philadelphia man suspected of possessing child pornography has been in jail for seven months and counting after being found in contempt of a court order demanding that he decrypt two password-protected hard drives.

https://arstechnica.com/tech-policy/2016/04/child-porn-suspect-jailed-for-7-months-for-refusing-to-decrypt-hard-drives/


Brute-force attack

영어로는 brute-force attack 또는 exhaustive key search, 우리말로는 무차별 대입 공격, 무작위 대입 공격, 브루트 포스 공격, 브루트-포스 공격이라 부른다. 주로 암호학에서도 쓰이는 방법이긴 하지만, 굳이 암호학만의 문제는 아니고 다른 알고리듬 분야에서도 사용되고 있다.

장점...이라 할 수 있나?

조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 문제를 푸는 것인데, 얼핏 무식하다고 생각할 수도 있겠지만 항상 정확도 100%를 보장한다는 점에서, 자원만 충분하면 가장 무서운 방법이다. 이론적으로 가능한 모든 경우의 수를 다 검색해 보는 것이라 정확도 100%가 항상 보장되니, 암호학에서는 가장 확실한 방법으로 통용되고 있다. 무엇보다도 암호 확인 작업이라는 것이 손으로 입력한 문자열의 동일 여부를 확인하는 것이기 때문에, 가능한 경우를 하나씩 대입하다 보면 언젠가는 암호를 찾을 수 있게 되는 식이다.

또한 브루트 포스의 특장점은 거의 완벽하게 병렬 작업이 가능하다는 점이다. 이 때문에 병렬 프로그래밍 기법을 사용하거나, GPGPU이용하기도 하며, 여러 대의 컴퓨터를 연결해서 동시에 작업할 수도 있다. 이렇게 하면 투자 자원에 비례해서 문제를 해결하는 시간을 줄일 수 있다. 즉, 컴퓨터를 10대 쓰면 10일 걸릴 작업을 1일만에 끝낼 수 있다는 이야기 이다. (다만 암달의 법칙 때문에 이런 식으로 병렬화가 잘 되는 작업은 흔치 않다.)

예시

예를 들어, 4자리 숫자로 된 핸드폰의 암호는 0000, 0001, 0002... 9999 까지 총 1만개(10^4)의 조합 중 하나이므로, 이를 하나씩 대입해 보면 핸드폰의 암호를 통과할 수 있게 된다. 한번 암호를 입력해 보는데 5초가 걸린다면, 5만초 즉 14시간이면 충분하고, 이를 사람 손이 아닌 컴퓨터로 처리할 수 있다면 1초 이내로 찾아낼 수 있게 되는 것이다.

아래 영상은 터미네이터2 에서 존 코너아타리 포트폴리오를 이용해서 ATM 머신을 해킹하는 장면. (얼핏 보면 브루트 포스처럼 보이지만 화면에 나오는 내용을 보면 진짜 부르트 포스는 아니다.) http://i.imgur.com/GIceyeC.gif

실제로 DES의 경우, 개발 당시에는 무결점 알고리즘이었으나 컴퓨터 성능이 크게 개선된 지금은 브루트 포스로도 다 뚫린다. 속도는 물론이고, 공격에 필요한 DES 사전 용량 역시 현재의 컴퓨터 환경에선 충분히 감당할 수 있기 때문. MD5 역시 컴퓨터의 발전 때문에 진작에 다 뚫린 지라 이미 SHA로 갈아탄 상태이다.

자원이 시궁창

하지만 앞서 언급했듯 자원이 문제, 브루트 포스 방법에는 문제의 복잡도에 매우 민감하다는 치명적인 단점을 지니고 있다.

달리 풀어서 말하면, 문제가 조금만 복잡해져도 매우 비효율적인 알고리즘이 될 수 있다는 것이다. 특히 경우의 수가 문제의 복잡도에 따라 기하급수적으로 증가하는 경우, 문제를 해결하는 데에 필요한 자원 역시 기하급수적으로 증가한다.

이 때문에 실제로 브루트 포스는 문제의 규모가 현재의 자원으로 충분히 커버가 가능한 경우에만 쓰이고, 대부분은 동적 계획법 등으로 많이 우회하는 편이다. 심지어는 정확도를 조금 희생해더라도 어떻게든 '이론상 가능한' 자원으로 해결할 수 있게 알고리즘을 설계하기도 한다. 후에 언급할 사전 공격 역시 정확도가 약간 희생된 것이다.

이러한 단점은 대부분의 암호화 알고리즘에서 역이용하고 있는데, 무어의 법칙 덕분에 컴퓨터 성능이 꾸준히 개선되고 있다 해도 그만큼 더 복잡한 암호화 기법을 이용하면 되기 때문이다. 현 세대의 암호화 기법을 브루트 포스로 다 뚫는다 해도, 그 시간이 지나고 나면 이미 구식도 아닌 구석기 알고리즘으로 전락해 있을 법하니 그만큼 시간을 충분히 벌 수 있는 것이다.

실제로 현재 가장 흔하게 사용되는 블럭암호인 AES 기반 암호화들의 경우에는 Weak Key를 사용하지 않는 이상 키를 모르는 이상 유의미한 시간 내에 풀 수 없으며, AES-256의 경우는 초당 100(10^18) 개의 키 대입을 하는 슈퍼컴퓨터로도 3000(3 * 10^51) 년은 족히 잡아먹는다. 아직 AES-128이 완전히 깨졌다는 보고가 없는데도 하나둘씩 AES-256으로 갈아타는 이상, AES-128이 다 깨질 때 쯤이면 이미 대다수가 AES-32k, 많이 봐 줘도 AES-2k를 쓰고 있을 판이 되는 것이다.(…)

암호학에서의 브루트 포스

앞서 언급했듯, 주로 암호학에서 사용 암호화에 사용되는 key나, 찾고자 하는 비밀번호가 길 수록 시간이 기하급수적으로 증가한다.

조합 가능한 모든 문자열을 대입하기 때문에 아무리 컴퓨터가 빠르다고 하더라도 시간이 매우 많이 걸린다. 당장 영문 소문자 + 숫자 조합만 쳐도 n자리의 암호를 뚫는 데에는 <math>O\left(36^n\right)</math>의 시간이 걸린다. 즉, 10글자만 되어도 36^10 = 3,656,158,440,062,976 가지가 된다. 이 정도면 쉬운 암호 알고리즘이라 해도 초당 1억번 계산 기준 대충 14개월 걸리는 수준이다. 물론 암호가 더 복잡하거나 길이가 더 길어지면 수백 ~ 수천 년은 기본으로 기다려야 한다.

좀 더 확장시켜서 암호로 입력할 수 있는 알파벳의 수를 k개라 치면, 이를 조합한 n자리 암호를 뚫는 데에는 <math>O\left(k^n\right)</math>의 시간이 걸리니 P-NP 문제로 치면 이 문제는 EXP 완전 문제가 된다. 사정이 이러니 낭비되는 시간을 최소화하려고 도입한 게 레인보우 테이블인데, 입력할 때 마다 계산(특히 해쉬 함수)하는 대신 미리 계산된 테이블을 참조하는 것이기 때문에 시간이 훨씬 단축되는 것이다. 물론 풍선 효과로 인해, 저장공간이 아주 많이 희생된다.

실제적인 예시

예를 들어 예전 하나 워드 같은 프로그램은 문서에 암호를 걸어 놓은 후, 문서 파일을 헥사 에디터로 열어보면 암호가 문서 파일 헤더에 적혀있는 것을 볼 수 있다. 즉, 문서 파일 자체가 암호화가 된 것이 아니라, 문서에 암호가 걸렸다라는 표시만 해 놓고, 프로그램에서 사용자에게 암호를 물어보아 암호가 동일하면 문서 파일을 보여주는 구조이기 때문에 암호를 아무리 어렵게 저장을 해도 손쉽게 암호를 통과할 수가 있게 되는 것이다.

하지만, 아래한글, MS워드, ZIP 포맷과 같은 파일 포맷은 사용자가 입력한 암호를 통해서 데이터를 암호화 했기 때문에, 암호를 통과하는 방법 따위는 존재하지 않고, 암호를 하나씩 대입해서 데이터를 풀어보는 것 이외에는 우회 방법 따위는 존재하지 않는다. 따라서, 이러한 암호화 된 파일을 풀어준다고 나와있는 프로그램들은 이러한 brute force공격을 대신 수행하주는 프로그램으로 봐도 무방하며, 해커들이 웹페이지에 로그인을 시도할 때에도 자주 사용된다. 브루트 포스 방식을 이용한 공격은 암호가 걸린 문서나 압축 파일의 암호를 해독하는데도 사용하지만, 온라인 로그인이 필요한 서비스에도 역시 동일한 방식으로 공격할 수 있다. 만일 서버에서 특정 사용자의 ID에 대해서 ID/PW 를 대입하는데 실패 횟수에 대해서 제한을 걸지 않는다면, 병렬로 사용자의 PW를 무차별 대입해서 암호를 알아낼 수 있기 때문에, 제정신을 가진 서버 관리자+프로그래머라면 비 정상적인 로그인 시도에 대해서는 항상 대비를 해야만 한다.[* 간혹 웹페이지를 통한 비정상적인 로그인 시도에 대해서는 차단을 하지만, POP3와 같은 눈에 잘 보이지 않는 서비스에 대해서는 비정상적인 로그인 시도를 막지 않아서 사용자 계정이 털리는 경우가 있다.]

유사한 방식

위에서도 나오듯이 정말로 처음부터 끝가지 무작위 공격을 하는것은 시간이 오래 걸리고 비효율적이며, 특정 대상을 지정하는게 아닌 "최대한 대량"의 계정에 대한 공격을 수행하기에는 불필요하다. 왜냐하면 100개의 계정을 공격 해서 1개를 뚫을 시간에 100000개의 계정을 공격해서 1개를 찾는게 시간적으로도 빠르기 때문이다. 따라서 암호를 대입할 때 a, b, c, .... aa, ab, ac..... ba, bb, bc, .... 와 같은 모든 가능한 조합을 대입하는 방법 대신 사용자들이 많이 쓰는 암호를 - 예를 들자면 abcd, 1234, qwert, q1w2e3, .... - 모아서 대입하는 방법도 많이 쓰이는데, 이를 사전 공격(Dictionary attack)이라고 한다.

방어 방법

다른 사람에게 브루트 포스로 암호가 털리는 것을 원치 않는다면, 다음 사항을 지키자.

  • 암호는 최소 10자리 이상을 사용하자. 암호가 12자리를 넘어간다면 슈퍼 컴퓨터를 가져와도 안전하다.
  • 암호에 특수문자를 사용하면 좀더 좋겠지만, 특수 문자 안 쓰고 그냥 암호가 길기만 해도 된다. 아무리 특수 문자를 써도 암호가 6자리 이하라면 털릴 것을 각오해야 한다.
  • 대부분 사전 공격부터 가하기 때문에 최소한 다음과 같은 단어들을 쓰는것은 자살행위이다. 브루트 포스 툴인 John The Ripper의 내장 사전파일의 맨 앞의 일부는 다음과 같다. 123456, abc123, password, computer, a1b2c3, qwerty, secret. 이것 말고도 3천여게정도 더 있으니 차라리 단어를 좀 섞자.
  • 여러 단어를 조합해서 만든 패스워드는 기억하기 쉽고 의외로 엔트로피가 높다. [[1]] 사전공격이 걱정 된다면 일반적이지 않은 문자열을 넣어주면 좋다.
  • 문장도 기억하기 어렵지 않고 사전공격에 강한 편이다. 단, iloveyou처럼 너무 정상적이거나 유명한 문장은 털리기 쉬울 수 있으므로 약간 비틀어 넣는 것이 좋다.

Dictionary attack

dictionary attack

~~事前에 하는 공격이 아니다~~

~~사전으로 맞으면 아프긴 하겠지만 그런 의미도 아니다.~~

암호화되어 저장된 비밀번호를 알아내기 위한 공격방법 가운데 하나. 주로 암호학에서 쓰이고는 있지만 동적 계획법 중 하나라 생각하면 알고리즘에도 포함될 수 있다.


보통 널리 사용되는 단어나 날짜, 전화번호 등과 같은 패턴들을 사전형태로 만들고 이들을 조합하는 방식으로 공격한다. 얼핏 들어서는 단순 대입법 못지않게 삽질로 생각하는 사람들이 많지만 의외로 적중확률이 높은 공격방법이다. 이는 사람들이 자신의 생일이나 전화번호, 이름 이니셜 등과 같은 특정한 패턴을 사용하는 경향이 있기 때문이다.

특히, 사람들은 보통 귀차니즘에 빠져서 동일한 비밀번호를 쓴다거나 거의 비슷한 비밀번호를 쓰는 경향이 많다. 게다가 한 번 털린 비밀번호는 공격자가 사전에 등록해놓고 계속 이용해먹는 경우가 많기 때문에, 하나가 털렸으면 죄다 털린다. 그렇기에 어디서 비밀번호가 노출된 적이 있다면 비밀번호 패턴을 완전히 바꾸는 것이 가장 바람직한 방법이다.

참고로 숫자나 특수문자를 썼다고 자신의 비밀번호는 안전하다고 믿는 사람들이 있는데, 지나치게 과신하는 것은 금물이다. 어차피 사람들 생각하는 것이 다르다곤 하지만 실제 까보면 별 차이도 없을 뿐더러, 대개 간단하게 조합하는 경향이 있기 때문이다. 대표적으로 "he11o^there"같은 건 거의 직빵으로 털린다.

방어 방법

사전 공격에 강한 비밀번호를 만드는 방법은 어떤 사전을 찾아봐도 도저히 나올 수 없는 조합으로 만드는 것이다. 알다시피 사전 공격은 적중도가 높기는 하지만 100%는 아닌지라 ]-[|/34<#!_@-zv_@ --어떻게 외울까--같은 식으로 지으면 충분히 방어할 수 있다. 한국의 경우 dlqudals 처럼 영타로 치면 외국 쪽에서는 뭥미 수준의 조합이 된다. (다만, 한국어를 아는 해커가 공격할 수 있으므로 실제로는 저렇게 지으면 안된다.) 하지만 이렇게 만든 암호는 해커는 물론 사용자의 '사전'에도 없는 것이라 기억하기 참으로 곤란하다.

이를 깨는 방법으로 레인보우 테이블이 있긴 한데, 원문에 솔트 문자열을 끼워넣는 것으로 어느정도 대응이 가능하다. 이 경우는 특히 해쉬에 주로 응용된다.

기타

SK컴즈 개인정보 유출 사건MD5가 보안에 취약하다는 이야기가 많이 나왔는데, 이 문제와 관련이 있다. 나온 지 오래된데다 사용률이 높다 보니 사전 분량도 방대하기 때문.

본격 해킹 게임 업링크에서도 등장한다. 다른 해킹 애플리케이션들에 비해 가격이 싸다. 실제로도 꽤 싼 편이다. 싸구려는 인터넷만 잘 뒤져도 공짜로(...)얻을 수 있고, 한국어용 알파벳 사전 파일도 중국쪽에서 싸게 싸게 만든다.


함께 보기

참조

  1. https://veracrypt.codeplex.com/wikipage?title=Personal%20Iterations%20Multiplier%20%28PIM%29
  2. https://veracrypt.codeplex.com/wikipage?title=Header%20Key%20Derivation
  3. VeraCrypt a Worthy TrueCrypt Alternative
    A fork of TrueCrypt's code, VeraCrypt strengthens the open source encryption software's transformation process and addresses other weaknesses. http://www.esecurityplanet.com/open-source-security/veracrypt-a-worthy-truecrypt-alternative.html
  4. 그런데 트루에선 비번넣고 삽입하면 바로 드라이브가 열렸는데(열렸는지도 모를정도로 순식간에 스무스하게 열리죠) 베라에선 아래와 같은 창이 뜨면서 스캔하는지, 무결점을 검사하는지 수십초가 지나서 열리는데 수시로 on/off 하는 상황에선 상당히 번거롭더군요.
    새로나온 1.0f-2에서 마운트 속도가 20% 향상되었다고 하는데 체감상 좀 빨라진것 같더군요. http://manian.com/qna/6405212
  5. 베라크립트의 전신인 트루크립트로 300기가 정도의 저용량 빈 파티션을 암호화한적이 있는데 0.1초만에 되더군요. http://www.etobang.com/plugin/mobile/board.php?bo_table=com&wr_id=241290

참고 사이트

  • 트루크립트 완벽 사용법 - 7. 베라크립트

http://www.neoanime.co.kr/free/3963139

  • 무료 암호화프로그램인 TrueCrypt를 대체하는 베라크립트(VeraCrypt)

http://m.blog.naver.com/wondy7/220228479575

  • 공인 인증서 암호화와 개인정보 보호를 위한 TrueCrypt 대체 프로그램-VeraCrypt

http://wezard4u.tistory.com/3183