Hacker News 의견

요약해보면 다음과 같음:

  • Go 1.20에서 math/rand 패키지의 Read 함수가 deprecated 되면서, 이를 crypto/rand 대신 잘못 사용한 사례들이 발견됨. 이는 보안에 취약한 결정론적 난수 생성기를 사용하게 되는 실수로 이어짐.
  • Go의 기본 난수 생성기를 CSPRNG(암호학적으로 안전한 의사 난수 생성기)로 바꾸는 것이 보안을 위해 더 좋은 접근임. 명시적으로 PRNG가 필요한 경우에만 선택하도록 하는 것이 바람직함.
  • gosec이나 golangci-lint 같은 정적 분석 도구는 math/rand 사용에 대해 경고를 줌.
  • math/rand/v2 패키지는 ChaCha8 암호를 사용하고 시스템 엔트로피로 시드되어 "안전한" 인상을 주지만, 여전히 보안에 민감한 작업에는 부적합함. 이는 crypto/rand를 사용해야 함.
  • Go 1의 math/rand는 정확히는 additive lagged Fibonacci generator로 볼 수 있음.
  • 새 math/rand는 최악의 경우에도 기존 비보안 난수 생성기의 절반 정도의 속도를 보이며, 대부분의 벤치마크에서는 거의 차이가 없었음. Go는 표준 라이브러리에서 안전성과 성능 사이의 적절한 균형을 잡고 있음.
  • Java의 java.util.Random 같은 실수를 방지하는 개발자 친화적인 접근으로 평가됨.
  • ChaCha8을 쓰는 이유와 AES-GCM 등 하드웨어 가속을 지원하는 블록 암호를 쓰지 않는 이유에 대한 궁금증이 제기됨.