- randomness가 무엇이고 왜 중요한가
- 강력한 randomness를 얻고, secrets 생성하기
- randomness의 함정
What's randomness?
Slow randomness? Use a pseudorandom number generator(PRNG)
Obtaining randomness in practice
Randomness generation and security considerations
Public randomness
Key derivation with HKDF
Managing keys and secrets
Decentralize trust with threshold cryptography
Summary
- 어떤 숫자가 그 집합의 다른 모든 숫자들과 동일한 확률로 선택되었다면, 그 숫자는 균일하고 무작위로 선택된다
- 엔트로피는 바이트 문자열의 무작위성을 나타내는 지표이다. high entropy는 균일하게 무작위인 바이트 문자열을 의미하며, low entropy는 쉽게 예측되는 바이트 문자열을 의미한다.
- pseudorandom number generator(PRNGs)는 균일한 무작위 시드를 사용하여 시드가 충분히 클 경우 암호화 목적(ex. secret key)으로 사용할 수 있는 거의 무한한 양의 무작위성을 생성하는 알고리즘이다.
- 난수를 얻으려면 프로그래밍 언어의 표준 라이브러리나 잘 알려진 암호화 라이브러리에 의존해야 한다. 이러한 기능을 사용할 수 없는 경우 운영 체제는 일반적으로 난수를 얻기 위한 인터페이스를 제공한다.
- 윈도우: 시스템 호출 제공
- 리눅스/FreeBSD: 시스템 호출 제공
- 기타 Unix 계열 운영체제: /dev/urandom 파일에서 무작위성을 나타냄
- Key derivation function(KDFs)는 편향됐지만 높은 엔트로피에서 비밀을 생성하고 싶을 때 유용하다.
- HKDF(HMAC 기반 key derivation 함수)는 가장 많이 사용되는 KDF이다. HMAC을 기반으로 한다.
- key management는 secrets을 지키는 영역이다. secret 보관할 장소 찾기, secret 사전 만료, secret 회전, secret이 침해되었을 때 무엇을 해야 하는지 등으로 구성된다.
- 주요 관리 부담을 줄이기 위해 한 참가자의 신뢰를 여러 참가자로 나눌 수 있다.