Clojure에서 비밀 생성

비밀 생성은 보안에 민감한 모든 애플리케이션에서 매우 중요한 부분입니다. 이 기사에서는 Clojure에서 비밀을 생성하는 데 도움이 되는 하위 수준 라이브러리에 대해 설명합니다.

Python에 익숙하다면 Python의 표준 라이브러리에서 secrets 모듈에 대해 들어봤을 것입니다.

음, secrets.clj은 Python의 비밀과 같지만 Clojure의 경우 암호, 계정 인증, 보안 토큰 및 관련 비밀과 같은 데이터를 관리하는 데 적합한 암호학적으로 강력한 난수를 생성하도록 설계된 라이브러리입니다.

설치


secrets.clj 파일에 project.clj를 추가합니다.

[likid_geimfari/secrets "1.1.1"]


그런 다음 lein deps를 실행하여 설치합니다.

이제 준비가 되었습니다.

(ns example.core
  (:require [secrets.core]
            [secrets.tools]
            [secrets.constants]))


용법



일반적인 사용 사례는 다음과 같습니다.
  • 난수 생성
  • 암호, SMS 코드 및 OTP 생성
  • 임의 토큰 생성
  • 암호 복구 URL 및 세션 키 생성


  • secrets.core/randbelow(n)

    이 함수는 [0, n) 범위의 보안 임의 정수를 생성합니다. 여기서 n는 배타적 상한입니다.

    예시:

    user=> (secrets.core/randbelow 9999)
    7612
    




    secrets.core/choice(seq)

    이 함수는 비어 있지 않은 시퀀스에서 임의의 요소를 반환하거나 시퀀스가 ​​비어 있으면 예외를 발생시킵니다.

    user=> (secrets.core/choice ["bob" "alice" "eve"])
    "eve"
    




    secrets.core/choices(seq)
    secrets.core/choice 와 같지만 이 함수는 시퀀스에서 선택한 임의의 요소 목록을 반환합니다.

    (secrets.core/choices ["bob" "alice" "eve"] 2)
    ("eve" "alice")
    




    secrets.core/token-hex(nbytes)

    16진수 형식의 보안 임의 문자열을 생성합니다. 문자열에는 nbytes 임의의 바이트가 있으며 각 바이트는 두 개의 16진수로 변환됩니다.
    n바이트가 제공되지 않으면 적절한 기본값인 32가 사용됩니다.

    user=> (secrets.core/token-hex(64))
    "3a3e8e6636000dd3b7d39aa4316935f27c2f013d768f0c00f309efb453f34dbc673060db2cd8af288494892848"
    




    secrets.core/token-urlsafe(nbytes)

    URL 안전 형식으로 보안 임의 문자열을 생성합니다.

    (defn generate-password-recovery-url [n]
      (str "https://mydomain.com/reset=" (secrets.core/token-urlsafe n)))
    (generate-password-recovery-url 64)
    "TItm04q8by00MRMcNBt7I3Yx-wSxyUa79isRLNyQJCd8K75RnqUahwcWA_rURBt1clknJiRGrubapGaUrEUnSw"
    




    secrets.core/token-bytes(nbytes)

    바이트 형식의 보안 임의 문자열을 생성합니다.

    (secrets.core/token-urlsafe(16))
    #object["[B" 0x3b2454e9 "[B@3b2454e9"]
    


    토큰은 몇 바이트를 사용해야 합니까?



    무차별 대입 공격으로부터 안전하려면 토큰에 충분한 임의성이 있어야 합니다.
    토큰에 필요한 임의의 비트 수는 애플리케이션에 따라 다르지만 256비트
    암호학적으로 강력한 것으로 간주됩니다.

    개인적으로 64바이트( 512 bits )를 사용하는 것이 좋습니다.

    연결



    원본 게시물: https://isaak.dev/2022/10/generating-secrets-in-clojure
    텔레그램 채널: https://t.me/software_dev_channel

    좋은 웹페이지 즐겨찾기