Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코루틴 빌더
- JanusWebRTCGateway
- table not found
- JanusWebRTCServer
- VARCHAR (1)
- JanusGateway
- 겨울 부산
- python
- 개성국밥
- ErrorResponse
- taint
- RouteLocator
- addhooks
- PersistenceContext
- 달인막창
- 코루틴 컨텍스트
- pytest
- mp4fpsmod
- 자원부족
- PytestPluginManager
- preemption #
- 깡돼후
- vfr video
- gitflow-shFlags
- Spring Batch
- kotlin
- tolerated
- terminal
- JanusWebRTC
- Value too long for column
Archives
너와 나의 스토리
[컴퓨터 보안] Hash Function 본문
반응형
Hash Function
- 가변 길이의 데이터 블록을 input으로 받아 고정된 길이의 hash 값을 출력한다.
- 데이터 압축의 역할로 사용할 수 있음
- 가변 길이를 입력받는다고는 하나, 어느 정도 정해져 있어서 보통 padding으로 채움
- h = H(M)
- M을 통해 h를 구하기는 쉬워야 하지만, h를 안다고 M을 쉽게 구할 수 있으면 안 된다. -> one-way property
- 두 가지 요구 조건을 만족해야 한다.
- The one-way property
- The collision-free property
- 서로 다른 input을 넣어 같은 hash 결과를 갖는 것 -> collision
- 이런 collision을 찾기 힘들어야 한다.
- 즉, The collision-free property는 다른 input이 들어가면 다른 output(hash 값)이 나오는 성질을 말한다.
데이터의 무결성과 Hash
- 원인: 변조된 데이터에 대해 hash 값을 쉽게 구할 수 있음
Message Authentiction Code(MAC)
- MAC = keyed hash function
- Keyed hash function: 메시지와 key를 input으로 넣어 hash 값을 출력한다
- key가 없는 공격자는 meet-in-the-middle attack을 못 함.
- plaintext와 hash 값(메시지와 key를 넣은)을 전송
- 수신자는 수신한 plaintext만 다시 (같은) 알고리즘으로 돌려보고 C3와 결과가 같다면 무결성(Integrity)을 확인할 수 있다.
- 또한 같은 hash 값이 출력된다는 것은 송신자가 key를 가지고 있다는 것으로 Authentication할 수 있다.
Digital Signature
- MAC과 역할이 비슷
- hash 값에 서명(private key)
- Authentication & Integrity & Nonrepudation 가능
- 메시지 변조 실질적으로 어렵다.
- 원본 메시지에 [메시지의 hash값을 private key로 encryption(서명)한 것]을 더해 전송
Hash Function: Password
- 사용자의 아이디(예: aa) 비밀번호(예: abc)를 저장할 때,
- a - abc, b - bcd 이런식으로 저장하는 것이 아니라
- a - H(abc), b - H(bcd) 이런 식으로 비밀번호의 hash 값만을 저장한다.
- 필요한 성질: One-way & Collision-free property
- hash 값을 알아도, 그 값을 출력하게한 input 값(비밀번호)을 알게 하면 안 된다. -> one-way property
- 서로 다른 두 개의 password가 같은 hash 값이 나오는 것을 collision이라고 하는데, 그러지 않도록 만들어야 한다. -> collision-free
- 위 성질을 지키면 안전한가?
- one-way로 여러 비밀번호들을 입력해보면서 hash 값을 알아내야함.
- Dictionary attack ( = offline dictionary attack)
- 비밀번호를 입력해보고 나오는 값을 dictionary 형식으로 쭉 기록함.
- 순서대로(aaaa~zzzz) 다 입력해보지 않고, 사람들이 많이 쓰는 비밀번호부터 입력해나가면 생각보다 빨리 찾을 수 있음
- 위 공격을 막기 위해 salt라는 값을 이용해 hash 함
- hash가 salt와 비밀번호 두 개를 넣어서 값을 출력하는 것
- 공격자는 먼저 salt 값을 찾아야 하는데, 그러려면 같은 비밀번호를 여러 개의 값(salt)을 넣어보며 다 찾아봐야 함.
- 이렇게 하면 위의 방법보다 훨씬 많은 리소스를 사용해야 함
- Dictionary attack ( = offline dictionary attack)
- one-way로 여러 비밀번호들을 입력해보면서 hash 값을 알아내야함.
Preimage
- h = H(x) 에서 x는 h의 preimage이다.
- hash는 N:1 mapping이다. 즉, 여러 개의 perimage가 같은 hash 값을 갖는 구조이다.
Hash function의 5가지 사용
- MAC
- One way & Collision free 성질 필요
- One-way -> H(D||S) = h
- h를 안다고 S(key)를 알게 되면, 그 후 다 변조할 수 있음
- collision free -> 변조했는데 hash 값이 같은 경우 변조 사실을 알 수 없다.
- Digital Signature
- collision free 성질이 필요
- Spriv(H(D))를 하는데 D가 변조되었는데 H(D)=H(D')인 경우 사인이 같아져 문제를 파악할 수 없다.
- 즉, A가 하나의 데이터에 대해 서명을 했는데, 서로 다른 데이터에 대한 hash 값이 같으면 A는 여러 개의 데이터에 서명한 것이 됨.
- Password
- One-way & Collision free 성질 필요
- Integrity
- Collision-free 필요
- PRNG
- One-way 필요
- 진짜 random number가 아니라 pseudo random이라 seed에서 시작해서 생성해내는 것.
- preimage가 밝혀졌다고 seed가 밝혀지면 안 됨
Secure Hash Algorithm(SHA)
- hash function MD4를 기반으로 만듦
- 160-bit hash 값 출력
- 깨진 적 있는 알고리즘
- 이를 보안하여(bit를 늘려서) SHA-2 나옴
- SHA2는 bit 수만 늘린 거라 내제적인 안전성 문제가 있음
- SHA3 - 구조를 바꾼 알고리즘
- Message Digest Size(S): 224, 256, 384, 512
- Collision resistance: $2^{\frac{S}{2}}$
출처:
- [Cryptography and Network Security: Principles and Practices]
반응형
'Computer Security' 카테고리의 다른 글
[컴퓨터 보안] 최근 암호 이슈 (1) | 2020.12.08 |
---|---|
[컴퓨터 보안] Random Bit Generation and Stream Ciphers (0) | 2020.12.08 |
Block Chain이란? (0) | 2020.12.07 |
[컴퓨터 보안] Key Management and Distribution (0) | 2020.12.07 |
[컴퓨터 보안] Digital Signature - Schnorr Identification/Schnorr signature (0) | 2020.12.07 |
Comments