FPGA에서 (약한) 엔트로피 소스를 구현할 수 있습니까?


12

평가 및 프로토 타이핑을 위해 FPGA의 IoT 플랫폼과 협력하고 있습니다. TLS를 지원해야하며 엔트로피 소스가 필요합니다.

디바이스 성능이 종종 우수하고 (모퉁이의 경우 매개 변수를 찾기가 어렵 기 때문에) 실제 랜덤 노이즈 소스는 FPGA에서 매우 전문적이지만 실용적이지만 이해하지만 의사 랜덤 시퀀스 생성기는 문제.

표준 I / O 채널 (uart, I2C 등) 만 있습니다. 오디오 ADC 입력을 제외하고 PRBS를 시드 할 수있는 것 같은 것은 없습니다. 고려해야 할 FPGA에서 엔트로피를 생성하기위한 신뢰할 수있는 트릭이 있습니까?

PRBS를 사용한다고 가정하면 시드로 사용할 수있는 외부 노이즈 소스를 잠재적으로 연결할 수 있습니다. 이것이 실제로 TLS 구현에 얼마나 추가되는지 알고 싶습니다. 이것이 고정 의사 난수 시퀀스를 사용하는 것보다 신뢰할 만하고 안전합니까, 아니면 약간 더 좋습니까? 더 많은 엔트로피를 위해 외부 노이즈 소스를 계속 폴링해야합니까?

내가 끝낸 엔트로피 소스가 제대로 암호화되지 않은 경우 (이것은 단지 프로토 타이핑을위한 것이므로) 괜찮지 만 비용 품질 균형을 이해하고 싶습니다.

답변:


6

당신은해야합니까? 다시 쓰기 가능한 보안 저장소와 초기 시드라는 두 가지가있는 경우 암호화로 안전한 임의 생성기를 구현할 수 있습니다. 즉, RNG를 한 번 시드 한 다음 상태를 저장하고 저장된 상태에서 작업하면 충분합니다. 이상적인 것은 아니지만, 엔트로피를 주기적으로 혼합하는 것이 좋지만, 특히 개발 protoype의 경우에는 좋습니다.

재기록 가능한 보안 저장소가 필요합니다. 장치에 ROM 및 비보안 저장소 만있는 경우이 방법은 불가능합니다. 공격자가 RNG 상태를 읽거나 수정할 수 없도록 RNG 상태를 저장할 수있는 위치가 있어야합니다.

이것이 작동하는 방식은 장치가 부팅 될 때 현재 RNG 상태를로드하고이를 사용하여 RNG 상태 크기의 두 배에 해당하는 충분한 임의 바이트를 생성하는 것입니다. 전반부를 새로 저장된 RNG 상태로 쓰고 후반부를 현재 세션의 초기 RNG 상태로 사용하십시오. 암호로 안전한 PRNG를 사용하면 암호로 안전한 PRNG가 생성됩니다. 저장된 RNG 상태를 재사용하지 않는 것이 중요하므로 RNG를 사용하기 전에 새로운 독립 RNG 상태를 작성해야합니다.

초기 엔트로피 주입은 제조 중 또는 장치 설정시 발생할 수 있습니다. 일반적으로 이러한 문제는 장치를 대신하여 엔트로피를 생성 할 수있는 PC에 연결하여 발생합니다.


이 맥락에서 사용 모델이 소비자 제품이 아니기 때문에 스토리지를 안전하게 보호 할 필요가 없다고 생각합니다. . 그래서 복제를 막을 수 없습니다.
Sean Houlihane
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.