본문 바로가기

Front-End/JavaScript

[JavaScript] Math.random 취약점 대체

JavaScript에서 랜덤값을 구하기 위해서는 보통 0에서 1보다 작은 값의 부동소수점을 리턴해주는

Math.random()을 사용한다. ex) 0.4645817650490742

하지만 random함수는 실제로 랜덤값을 생성한다기보다

예상 가능한 난수인 유사난수를 생성하여 시스템 보안에 약점을 유발한다.

따라서 JavaScript에서는 암호학적으로 안전한 난수를 생성할 대체자로 Crypto를 사용하여 난수를 생성할 수 있다.


crypto.getRandomValues()

: 16비트, 32 비트등의 랜덤 숫자가 들어간 배열을 구할 수 있다.

window.crypto.getRandomValues(new Uint32Array(1)); //32비트 랜덤 배열 1개, Math.random() 대체시 사용
window.crypto.getRandomValues(new Uint16Array(1)); //16비트 랜덤 배열 2개

 

 

브라우저별로 적용되게하기위해 window.msCrypto의 경우도 추가해 줄 수 있다.

(window.crypto || window.msCrypto).getRandomValues(new Uint32Array(1))[0]/4294967296




* 참고
: https://hitomis.tistory.com/m/69

 

: https://okky.kr/questions/1068172

: https://yceffort.kr/2021/09/javascript-random-number

'Front-End > JavaScript' 카테고리의 다른 글

[JavaScript] ios에서 new Date()  (1) 2024.01.03
[JavaScript] 객체 값 비교  (0) 2023.05.20
[JavaScript] call, apply, bind  (1) 2023.03.18
[JavaScript] 모듈 내보내기/불러오기  (0) 2023.03.11
[JavaScript] Node.js, NPM  (0) 2023.03.11