15
Use of a One-Way Hash without a salt System & Network Security Lab 석석 25 석 석석석 2013.5.23

Use of a One-Way Hash without a salt

  • Upload
    leona

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

Use of a One-Way Hash without a salt. System & Network Security Lab 석사 25 기 유창훈 2013.5.23. Table of Contents. 소개 단방향 해쉬함수 단방향 해쉬함수 문제점 단방향 해쉬함수 보완 Q&A. ‘ 보안 시스템의 안전성 ’ = ‘ 약한 부분의 안전성 ’. Introduction. Introduction. 패스워드 저장 방법 단순 텍스트 (Plain text) 단방향 해쉬함수의 다이제스트 - PowerPoint PPT Presentation

Citation preview

Page 1: Use of a One-Way Hash without a salt

Use of a One-Way Hash without a salt

System & Network Security Lab석사 25 기 유창훈

2013.5.23

Page 2: Use of a One-Way Hash without a salt

Table of Contents

1. 소개2. 단방향 해쉬함수3. 단방향 해쉬함수 문제점4. 단방향 해쉬함수 보완5. Q&A

Page 3: Use of a One-Way Hash without a salt

Introduction

• ‘ 보안 시스템의 안전성’ = ‘ 약한 부분의 안전성’

Page 4: Use of a One-Way Hash without a salt

Introduction

Page 5: Use of a One-Way Hash without a salt

단방향 해쉬함수

패스워드 저장 방법- 단순 텍스트 (Plain text)- 단방향 해쉬함수의 다이제스트

- Plaintext : hunter2

- Plaintext : hunter3

* 눈사태효과

f52fbd32b2b3b86ff88ef6c490628285f482af15ddcb29541f94bcf526a3f6c7

fb8c2e2b85ca81eb4350199faddd983cb26af3064614e737ea9f479621cfa57a

Page 6: Use of a One-Way Hash without a salt

단방향 해쉬함수 문제점

속도- 해싱은 원래 패스워드를 저장하기 위한 목적이 아님- 10 만회 수행시 ( md5,sha1: 0.1 초 , sha-256/384/512: 0.2

초 )- 빠른 처리 속도의 역이용 .

인식 가능성- 전처리 이용 .- Rainbow table rainbow attack- 모든 비번에 대한 해쉬 결과값 테이블을 공동으로 제작 . - 현재 숫자로된 패스워드 12 자리 , 소문자만 10 자리 , 숫자

+ 소문자 8 자리 , 숫자 + 소문자 + 대문자 7 자리에 대한 테이블완성

Page 7: Use of a One-Way Hash without a salt

단방향 해쉬함수 문제점

GPU 프로그래밍 CUDA Programming Compute Unified Device Architecture 최초의 CUDA SDK 는 2007 년 2 월에 공개 CUDA  지원 하드웨어 : GeForce 8  시리즈 이상 GPGPU 의 통합 개발 환경 제공을 목적 범용적인 프로그램을 처리할 수 있도록 변경

Page 8: Use of a One-Way Hash without a salt

단방향 해쉬함수 문제점

/ Device code__global__ void test(int *result){ int tidx, bidx;

tidx = threadIdx.x; // threadbidx = blockIdx.x; // blockresult[THREAD_SIZE * bidx + tidx] = (bidx + 2) * (tidx + 1);

}// Host codeint main(){ host_Result = (int *)malloc( BLOCK_SIZE * THREAD_SIZE * sizeof(int) );

cudaMalloc( (void**) &device_Result, sizeof(int) * BLOCK_SIZE * THREAD_SIZE);

test <<<BLOCK_SIZE, THREAD_SIZE>>>(device_Result); //Execute Device code

cudaMemcpy( host_Result, device_Result, sizeof(int) * BLOCK_SIZE * THREAD_SIZE, cudaMemcpyDeviceToHost );

printf("\n%d\n", host_Result[10]);free(host_Result); //Free host memorycudaFree(device_Result); //Free device memory }

Page 9: Use of a One-Way Hash without a salt

단방향 해쉬함수 문제점

CUDA 장점- 높은 연산처리 능력- 병렬프로그램의 확장성- 저렴한 가격- 고성능 서버보다 편리한 설치 및 유지

CUDA 단점- CUDA 프로그래밍에서 PC 와 그래픽 사이의 데이터 복사과정

Page 10: Use of a One-Way Hash without a salt

단방향 해쉬함수 보완하기 - 1) 솔팅 (salting)

Salting- Salt 와 salting- 솔트와 패스워드의 다이제스트를 데이터베이스에 저장 .- 모든 패스워드가 고유의 솔트를 갖고 있어야함 . - 32 바이트 이상을 권고 .- Salt 의 관리 .- Salt 의 적용 .

Page 11: Use of a One-Way Hash without a salt

단방향 해쉬함수 보완하기 - 1) 솔팅 (salting)

솔팅 추가 전

솔팅 추가 후

public byte[] getHash(String password) throws NoSuchAlgorithmEx-ception {

MessageDigest digest = MessageDigest.getInstance("SHA-256");

digest.reset();return digest.digest(password.getBytes("UTF-8"));

}

public byte[] getHash(String password) throws NoSuchAlgorithmEx-ception {

MessageDigest digest = MessageDigest.getInstance("SHA-256");

digest.reset();digest.update(salt);return digest.digest(password.getBytes("UTF-8"));

}

Page 12: Use of a One-Way Hash without a salt

단방향 해쉬함수 보완하기 - 2) 키스트레칭

키스트레칭- 패스워드의 다이제스트가 다시 해쉬함수의 입력이됨 .- 1 초에 수천번 vs 1 초에 5 번

MessageDigest digest = MessageDigest.getInstance("SHA-256");digest.reset();digest.update(salt);byte[] input = digest.digest(password.getBytes("UTF-8"));for (int i = 0; i < iterationNb; i++) {

digest.reset();input = digest.digest(input);

}

Page 13: Use of a One-Way Hash without a salt

단방향 해쉬함수 보완하기 - 3) Adaptive key derivation function

PBKDF2 ( Password-Based Key Derivation Function)- 가장 많이 사용됨 . - 솔트를 적용한 후 해쉬함수의 반복횟수를 임의로 선택 가능- 가볍고 구현이 쉬움 .- NIST( 미국표준연구소 ) 에서 승인된 알고리즘 .- 미국 정부 시스템에서도 사용됨 .

DIGEST = PBKDF2( Password, Salt, C, Dlen)Password: 패스워드Salt: 솔트C: 원하는 반복 수DLen: 원하는 다이제스트 길이

Page 14: Use of a One-Way Hash without a salt

단방향 해쉬함수 보완하기 - 3) Adaptive key derivation function

public class PBKDF2 { // 임의 salt 를 생성

SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); byte[] salt = new byte[32]; random.nextBytes(salt);

……

// 반복 횟수 : 10000 번 결과 길이 : 256bit KeySpec ks = new PBEKeySpec(password, salt, 10000, 256); …

}

Page 15: Use of a One-Way Hash without a salt

Q&A

감사합니다 .