반응형
발단
pk로 auto increment 된 정수형을 쓰느냐 UUID를 쓰느냐 둘다 쓰느냐의 이야기를 하다가
CUID 라는 걸 알게 되었다.
최근에 TSID 도 쓰게 되어서 유니크한 값에 사용되는 자료형들에 대해 짧게 적어보려는 글의 시작
(+UUID version,GUID, TSID 와의 비교까지 해보면..좋을 듯?)
CUID
https://github.com/paralleldrive/cuid2
리드미에 따르면
[장점]
- 다음 값을 예측하거나 유효한 키값을 추론하는 등 예측이 쉽지 않음
여러개의 독립적인 무작위 소스와 해시값들을 사용한다고 함. NIST 표준을 따르는 암호학적으로 보안적인 해싱 알고리즘(Sha3)을 따름- CUID 는 다음과 같은 엔트로피 소스들을 사용함
- 생성한 값이 JavaScript 코드나 CSS 스타일링에서 문제 없이 사용될 수 있도록 그 규칙을 따르는 값을 사용 ( 숫자로 시작할 수 없고, 문자 또는 _,$로 시작해야 함)
- 시스템 현재 시각
- 의사 난수 값
- session counter, 사용자 지문값 등 프로그램이나 하드웨어에서 사용되는 값들
- CUID 는 다음과 같은 엔트로피 소스들을 사용함
- 수평적인 여러 기기에서도 유니크 값 생성 보장
많은 pseudo-random 알고리즘들은 시간ms 값을 랜덤시드로 사용하는데, 이는 수많은 기기에서 같은 시각에 실행될 경우 충돌 가능성이 있음 (v4 UUID에서 보고됨). CUID 는 다양한 엔트로피 소스를 사용해 이를 피함 - 중복값 생성(충돌)될 확률이 낮음
약 4,000,000,000,000,000,000 번 생성했을 때 중복된 id값이 생성될 확률이 50%정도이다. - 오프라인 환경에서 생성 가능
- 특수문자가 없는 편리성
Base36 으로 인코딩되어있음 (소문자와 숫자만 사용됨) - 빠름. 비동기연산이나 사용자가 인지할 만한 지연 없음
- 지나치게 빠르지 않음 (보안 이슈)
너무 빠르면 복제값을 찾거나 entropy-hiding 을 깨트리는 병렬공격을 당할 수 있음.
unique id 세계에서는 가장 빠른 자는 보안적인 측면에서 지게 되어있다고 한다.
(무슨말이지 해시와 관련된 문제라고 한다. 따로 알아봐야할 듯
[단점 - 이럴 땐 적절하지 않음]
- 순차적인 id 값이 필요할 때
- tight 한 loop나 render loop 등 빠르고 효율적인 처리 성능이 요구되는 상황
[그 외]
- CUID1 는 deprecated됨
- CUID1 는 항상 'c' 로 시작했지만, CUID2 는 아님!
- CUID2 는 기존 CUID1 를 그대로 대체할 수는 없다. 그래서 교체 라이브러리를 마련함
- CUID 는 isCuid() 라는 메서드로 DB접근 없이 유효한 Cuid 형식인지 확인이 가능함
UUID 는 따로 기능을 제공하진 않아서 보통 정규표현식으로 형식을 확인함
그래서
어쨌든 타임값도 쓰는 것 같은데 어떻게 보안적으로 좋다는 건지 아직은 잘 모르겠다..
타임값을 쓰지만 다른 시드도 복합적으로 사용해서?
UUID에서 report되던 충돌문제를 개선했다고 하니 좋아졌을 것 같긴 한데 🤔 어떻게?
UUID 나 다른 알고리즘에 대해서도 찾아보고 비교해 봐야 체감이 될 것 같다
어떤 점에서는 좋겠고, 어떤 점에서는 약하겠는지
isCuid() 라는 메서드로 DB접근 없이 유효한 Cuid 형식인지 확인이 가능함 -> 이 점이 편리하다고 들었다는데 이마저도 아직 체감이 안된다. 그냥 형식을 확인하는 거면 UUID도 정규표현식 확인하는 메서드 하나 만들어서 쓰면 똑같아지는 건가?
CUID 라는 게 있다는 걸 이렇게 알아보았습니다~
~의문~
- 정말 좋은가?
- 오프라인 환경에서 생성할 수 없는 키값은 어떤게 있나?
- gzip 이 뭐지
- unique id 세계에서는 가장 빠른 자는 보안적인 측면에서 지게 되어있다고 한다?
-> 해시에서 보안과 속도의 관계 - Base36
- NIST 표준
- Sha3
반응형
'이모저모 > Dev스몰톡&프젝' 카테고리의 다른 글
[Conference] Google I/O Extended Incheon 송도 (24/07/28) (1) | 2024.07.30 |
---|---|
개요 (0) | 2021.09.04 |