BCrypt vs Argon2: .NET에서 비밀번호 해싱 – 실용적인 심층 탐구

발행: (2026년 2월 28일 오후 01:41 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

개요

비밀번호 저장은 .NET 애플리케이션에서 매우 중요한 보안 문제입니다. 빠른 암호화 해시(SHA‑256 등)는 공격자가 GPU나 ASIC을 이용해 초당 수십억 번의 추측을 수행할 수 있기 때문에 부적합합니다. 비밀번호 전용 해시 알고리즘은 의도적으로 느리게 설계되며 각 비밀번호마다 고유한 랜덤 솔트를 포함하여 무차별 대입 및 레인보우 테이블 공격을 비용이 크게 들게 만듭니다.

BCrypt

BCrypt는 1999년에 도입되었으며 Blowfish 암호화 알고리즘을 기반으로 합니다. 수정된, 비용이 많이 드는 키 스케줄을 여러 번 반복합니다.

기술 세부 사항

  • 메모리 사용량: 고정 낮음(~4 KB per hash) – 메모리‑하드하지 않음.
  • Cost 파라미터: 단일 “작업 인자”(예: Cost = 13 → 2¹³ = 8 192 반복).
  • 성능: 순수 CPU 의존; 최신 GPU도 여전히 비교적 저렴하게 다수의 BCrypt 해시를 병렬로 계산할 수 있음.

설치

dotnet add package BCrypt.Net-Next

샘플 코드 (C#)

using BCrypt.Net;

public static class PasswordHasher
{
    private const int WorkFactor = 13;

    public static string Hash(string password)
        => BCrypt.Net.BCrypt.HashPassword(password, WorkFactor);

    public static bool Verify(string password, string hash)
        => BCrypt.Net.BCrypt.Verify(password, hash);
}

Argon2

Argon2는 2015년 Password Hashing Competition에서 우승했으며 비밀번호 해싱을 위해 처음부터 설계되었습니다.

기술 세부 사항

  • 메모리‑하드: 추측당 상당한 RAM을 할당하도록 강제하여 대규모 병렬 공격 비용을 크게 상승시킴.
  • 변형: Argon2d, Argon2i, Argon2id(비밀번호에 권장 – 하이브리드 접근).
  • 조정 가능한 파라미터:
    • 메모리 크기(m) – 일반적으로 32 MB–128 MB 이상.
    • 반복 횟수(t).
    • 병렬성(p).

설치

dotnet add package Isopoh.Cryptography.Argon2

샘플 코드 (C#)

using Isopoh.Cryptography.Argon2;

public static class PasswordHasher
{
    public static string Hash(string password)
        => Argon2.Hash(password);

    public static bool Verify(string password, string hash)
        => Argon2.Verify(hash, password);
}

이 라이브러리는 안전한 기본값을 제공하며 솔트 생성 및 인코딩을 자동으로 처리합니다.

비교

기능BCryptArgon2
메모리 사용량고정 ~4 KB (메모리‑하드 아님)조정 가능, 일반적으로 32 MB–128 MB+
공격 저항성CPU 무차별 공격에 강하지만 대규모 GPU 병렬성에 약함높은 메모리 요구량으로 GPU, ASIC, 병렬 공격에 강함
튜닝단일 cost 파라미터세 파라미터: 메모리, 시간, 스레드
설계 연도1999 (Blowfish 기반)2015 (비밀번호 해싱 전용 설계)

언제 어떤 것을 사용해야 할까

BCrypt를 사용할 경우:

  • 이미 BCrypt에 의존하고 있는 레거시 시스템을 유지 보수할 때.
  • 메모리가 매우 제한된 서버에 배포할 때.
  • 단순함이 주요 고려 사항일 때.

Argon2를 사용할 경우:

  • 새로운 애플리케이션을 구축할 때.
  • 매우 민감한 사용자 데이터를 다룰 때.
  • 현재 및 미래의 하드웨어 공격에 대한 최상의 보호를 원할 때.

모범 사례

  • 프로덕션 하드웨어에서 벤치마크하십시오. 해시당 검증 시간이 400–800 ms 정도가 목표입니다.
  • 특히 Argon2의 경우 동시 부하 하에서 메모리 소비를 테스트하십시오.
  • 알고리즘을 전환할 때는 다음 로그인 성공 시 비밀번호를 재해시하십시오.
  • 비밀번호 해싱과 함께 로그인 시도 제한 및 가능한 경우 **다중 인증(2FA)**을 결합하십시오.
0 조회
Back to Blog

관련 글

더 보기 »

과거와의 마지막 춤🕺

소개 안녕하세요 dev.to 커뮤니티! 일주일 전에 저는 저를 소개하고, 웹 개발을 떠나 cryptograph에 집중하기 위해...

현대 웹 앱에서 OTP 인증 시작하기

왜 OTP 인증이 중요한가 - 로그인 또는 회원가입 시 사용자 신원을 확인합니다 - 가짜 계정 생성을 방지합니다 - 추가적인 보안 계층을 제공합니다 - 일반적으로 사용됩니다