kbmMW 난수 생성 및 보안 비밀번호 구현

난수 생성 체계

kbmMW 프레임워크는 보안 중심 애플리케이션 개발을 위해 다양한 난수 생성 엔진을 내장하고 있다. 각 엔진은 특정 용도에 최적화되어 있으며, 비트 수와 알고리즘 특성에 따라 선택할 수 있다.

32비트 난수 엔진

  • TkbmMWRandomDelphi — Delphi 기본 엔진과 동일한 방식
  • TkbmMWRandomPCGUInt32 — PCG(Permuted Congruential Generator) 계열
  • TkbmMWRandomMersenneTwisterUInt32 — 32비트 메르센 트위스터

64비트 난수 엔진

  • TkbmMWRandomSplitMix — SplitMix64 알고리즘
  • TkbmMWRandomXoroshiro128Plus — xoroshiro128+
  • TkbmMWRandomXoroshiro1024 — xoroshiro1024*
  • TkbmMWRandomMersenneTwisterUInt64 — 64비트 메르센 트위스터

모든 엔진은 kbmMWRandom 유닛을 참조하여 사용하며, 공통 기반 클래스 TkbmMWCustomRandom을 상속받는다. 기본 사용법은 다음과 같다.

uses kbmMWRandom;

procedure TForm1.DumpRandomValues;
var
  engine: TkbmMWRandomXoroshiro128Plus;
  idx: Integer;
begin
  engine := TkbmMWRandomXoroshiro128Plus.Create;
  try
    for idx := 1 to 100 do
      LogOutput.Add(engine.Random.ToString);
  finally
    engine.Free;
  end;
end;

기반 클래스 기능

TkbmMWCustomRandom이 제공하는 핵심 인터페이스는 다음과 같다.

public
  constructor Create; virtual;
  destructor Destroy; override;

  class function Make: T; overload; virtual;
  class function Make(const AUpperBound: T): T; overload; virtual;
  class function Make(const ALower, AUpper: T): T; overload; virtual;
  class function MakeFraction: Double; virtual;
  class function MakeDouble: Double; overload; virtual;
  class function MakeDouble(const ALower, AUpper: Double): Double; overload; virtual;

  function Random: T; overload;
  function Random(const AUpperBound: T): T; overload;
  function Random(const ALower, AUpper: T): T; overload;
  procedure Seed(const AValue: T);

  function RandomFraction: Double; virtual; abstract;
  function RandomDouble: Double; overload; virtual; abstract;
  function RandomDouble(const ALower, AUpper: Double): Double; overload; virtual; abstract;

  property BitDepth: Integer read GetBits;
  property ThreadSafe: Boolean read FThreadSafe write FThreadSafe;
end;

특징으로는 범위 지정 난수 생성, 실수형 난수, 시드 설정, 그리고 ThreadSafe 속성을 통한 동시성 제어가 있다.

활용: 6자리 인증번호 생성

PCG 엔진의 Make 정적 메서드를 활용하면 간결하게 구현할 수 있다.

function CreateVerificationCode: Integer;
begin
  // 기존 Delphi 방식:
  // Randomize;
  // Result := RandomRange(100000, 999999);

  // kbmMW 방식:
  Result := TkbmMWRandomPCGUInt32.Make(100000, 999999);
end;

보안 비밀번호 생성

kbmMW는 난수 엔진을 기반으로 두 가지 비밀번호 생성 전략을 제공한다. 필요시 kbmMWPassword 유닛을 참조한다.

혼합형 비밀번호 생성기

TkbmMWMixerPasswordGen는 문자 조합 규칙을 세밀하게 제어할 수 있다. 숫자, 특수문자, 대소문자 비율과 최소 길이를 설정하여 9rn=FM1Q 같은 복합 비밀번호를 생성한다.

procedure TForm1.GenerateMixedPassword;
var
  generator: TkbmMWMixerPasswordGen;
begin
  generator := TkbmMWMixerPasswordGen.Create;
  try
    // 기본값: 최소 8자, 숫자 1~4개, 특수문자 없음, 대소문자 혼합
    ShowMessage(generator.Generate);
    // 출력 예: 69vcRPhw
  finally
    generator.Free;
  end;
end;

Koremutake 비밀번호 생성기

TkbmMWKoremutakePasswordGen는 64비트 난수를 음절 기반 문자열로 인코딩한다. 발음 가능한 문자열로 HYFEBRYGROFEDRABOVYNE 같은 형태를 생성하며, 음성 전달이 필요한 초기 비밀번호 배포에 적합하다.

procedure TForm1.GenerateKoremutakePassword;
var
  generator: TkbmMWKoremutakePasswordGen;
begin
  generator := TkbmMWKoremutakePasswordGen.Create;
  try
    ShowMessage(generator.Generate);
    // 출력 예: GUMIPAVYGRYTIFOFYSI
  finally
    generator.Free;
  end;
end;

확장: 커스텀 생성기 구현

제공되는 두 전략 외에도 TkbmMWCustomPasswordGen를 상속받아 프로젝트 요구사항에 맞는 전용 생성기를 직접 구현할 수 있다. 난수 엔진과 비밀번호 정책을 분리함으로써, 알고리즘 교체 없이 규칙만 변경하는 유연한 설계가 가능하다.

태그: kbmMW Delphi 난수생성기 PCG 메르센트위스터

7월 11일 04:14에 게시됨