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