503. 보안 기능 (Security Features)의 설계

핵심 인사이트 (3줄 요약)

  1. 본질: 보안 기능(Security Features)의 설계는 "나쁜 놈을 막자"는 추상적인 핑계를 버리고, 인증, 인가, 암호화, 로깅, 예외 처리라는 5가지 핵심 방패(Feature)를 시스템의 뼈대(Architecture)에 기계적이고 명시적인 모듈(Module)로 하드코딩해 넣는 설계 예술이다.
  2. 가치: KISA 47개 보안 약점 가이드의 두 번째 거대 카테고리(15개 항목)로, 개발자가 암호화 키를 소스코드에 하드코딩하거나 낡은 난수(Math.random())를 쓰는 **멍청한 쌩코딩(Raw-coding) 실수를 인프라 레벨의 공통 모듈(프레임워크)로 흡수하여 100% 원천 멸균(Sterilization)**시킨다.
  3. 융합: "보안은 비즈니스 로직과 분리되어야 한다"는 클린 아키텍처의 철학에 따라, 스프링(Spring)의 **AOP(관점 지향 프로그래밍) 및 필터/인터셉터(Filter/Interceptor)**와 융합되어, 개발자의 타자 한 번 없이도 시스템 전역에 100% 일관된 보안 장막(Security Blanket)을 펼친다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: 시스템이 해커를 방어하기 위해 갖춰야 할 '능동적인 무기들'을 설계하는 것이다. 단순히 "비밀번호를 암호화하자"가 아니다. "비밀번호는 Bcrypt 모듈로 암호화하고, 그 해시 모듈은 AuthService 안에서만 단일하게 호출되어야 하며, 만약 암호화에 실패하면 SecurityLogger 모듈을 통해 Splunk 서버로 알람을 쏜다"라고 부품들의 협력(Collaboration)과 경계를 꼼꼼히 그리는 도면 작업이다.

  • 필요성: 100명의 개발자에게 "자, 각자 맡은 화면에서 비밀번호 암호화 잘 처리하세요!"라고 지시했다. 결과는? A개발자는 MD5(구식), B개발자는 SHA-256(솔트 없음), C개발자는 Bcrypt를 썼다. 해커가 털어보니 방어막이 누더기다. 보안 기능은 파편화(Fragmentation)되는 순간 그 자체로 취약점이 된다. 100명의 개발자가 생각 없이 끌어다 써도 전사적으로 100% 똑같은 강도의 방어력이 보장되는 '중앙 집중식 공통 보안 컴포넌트'를 설계 초기에 뿌리 박아두어야 한다.

  • 💡 비유: 보안 기능 설계는 아파트 짓을 때의 **'중앙 통제형 방범 시스템 배선 공사'**와 같습니다. 각 세대 입주민(개발자)에게 "각자 알아서 열쇠 튼튼한 거 사다 다세요"라고 하면 어떤 집은 최첨단 도어록을, 어떤 집은 숟가락으로 열리는 자물쇠를 답니다. 도둑은 자물쇠 집만 골라서 탑니다. 진정한 아키텍트(시공사)는 건물을 지을 때 벽 속에 이미 '전 세대 공통 지문 인식기 및 경비실 직통 비상벨(공통 보안 프레임워크)' 배선을 다 깔아버리고, 입주민은 그냥 손가락만 대게 만들어야 합니다.

  • 등장 배경 및 발전 과정:

    1. 개인기(Personal Skill) 의존 시대: 90년대엔 개발자 개개인의 보안 지식(내공)에 100% 의존했다. 천재가 짠 코드는 철벽이었고, 주니어가 짠 코드는 자동문이었다.
    2. 가이드라인의 하달 (2000년대): KISA, OWASP 등이 "비밀번호는 이렇게 저장해라"라고 문서(가이드)를 배포했다. 하지만 문서를 읽는 놈과 안 읽는 놈의 격차는 여전했다.
    3. 프레임워크 주도 방어 (현재): 문서를 읽으라고 강요하지 않는다. 아예 Spring Security, Shiro 같은 보안 전용 프레임워크를 뼈대로 도입하여, "이 프레임워크 룰대로 안 짜면 아예 로그인이 안 되게(컴파일 실패)" 아키텍처 환경 자체를 멱살 잡고 강제화해 버렸다.
  • 📢 섹션 요약 비유: 보안 기능 설계는 병원의 **'중앙 소독실'**입니다. 의사(개발자)마다 자기가 쓸 수술용 칼을 대충 비누로 씻게 내버려 두면 환자(시스템)는 죽습니다. 무조건 모든 메스는 지하실의 '중앙 고압 멸균기(공통 암호화/인증 모듈)'에 넣었다 뺀 것만 쓰도록 병원 규정(아키텍처)으로 강제해야 100% 무균 수술이 가능해집니다.


Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

1. 보안 기능 5대 필수 모듈 (Architecture Building Blocks)

시스템 도면(UML)을 그릴 때 반드시 떡 버티고 있어야 할 5개의 콘크리트 기둥이다.

  1. 인증 모듈 (Authentication): "너 누구야?"를 묻는다. MFA(다중 인증), 세션 타임아웃, 로그인 5회 실패 시 계정 잠금(Lockout) 기능을 전담한다.
  2. 접근 제어 모듈 (Authorization): "너 이거 할 자격 있어?"를 묻는다. RBAC(역할 기반 통제)를 적용하여, /admin으로 시작하는 모든 경로는 관리자 권한(Role_Admin)이 없으면 0.1초 만에 403 에러로 튕겨낸다.
  3. 암호화 모듈 (Cryptography): 암호화를 뿔뿔이 흩어져서 짜면 안 된다. 암호/복호화만 전문으로 하는 CryptoService를 중앙에 두고, 이 모듈만이 외부 Vault(KMS) 서버에서 '비밀 키(Secret Key)'를 안전하게 꺼내와 쓸 수 있는 유일한 권한을 가진다.
  4. 로깅 및 감사 모듈 (Audit Logging): 모든 중요한 행위(돈 송금, 비번 변경)의 족적(IP, 시간, 행위자)을 블록체인처럼 수정 불가능한 WORM 스토리지로 쏘는 비동기(Async) 모듈.
  5. 예외 처리 모듈 (Exception Handling): 서버 내부에서 SQL 에러가 터지면, 쌩얼(DB 구조)을 보여주지 않고 예쁜 화장(가짜 에러 메시지)을 덧씌워 화면에 뿌려주는 포커페이스 마스크.

2. KISA 보안약점 가이드 "보안 기능" (15개 항목)의 뼈대 타격

KISA는 특히 **'암호화'**와 **'권한'**에 대해 개발자가 꼼수 부리는 것을 무자비하게 린터(Linter)로 찍어 누른다.

  • 하드코딩된 비밀번호 (CWE-259): 자바 코드 안에 String key = "1234"라고 적는 순간 스캐너(Sparrow)가 1초 만에 찢어버린다. 무조건 외부 설정 파일(Environment Variable)이나 KMS에서 주입받아야 한다.

  • 적절하지 않은 난수 사용 (CWE-330): 이메일 인증 코드를 만들 때 java.util.Random을 쓰면 털린다. 무조건 시스템 노이즈를 긁어오는 암호학적 난수 **java.security.SecureRandom**을 쓰도록 모듈 뼈대를 고정해야 한다.

  • 취약한 암호 알고리즘 사용 (CWE-327): MD5, DES 같은 썩은 암호화를 호출하면 빌드가 터진다. 무조건 SHA-256 이상, AES-256을 쓰게 강제한다.

  • 📢 섹션 요약 비유: 이 모듈들은 **'은행의 5가지 물리적 방어 시스템'**입니다. 인증(경비원의 신분증 검사) ➡ 접근 제어(VIP실은 특별 지문 인식) ➡ 암호화(100억짜리 티타늄 금고) ➡ 로깅(24시간 녹화되는 CCTV) ➡ 예외 처리(도둑이 폭탄을 터뜨려도 돈에 잉크가 터져 못 쓰게 만드는 훼손 장치). 이 5개가 하나의 시계태엽처럼 완벽하게 맞물려 돌아가야만 난공불락의 은행이 완성됩니다.


Ⅲ. 융합 비교 및 다각도 분석

1. 흩어진 보안(Scattered) vs 중앙 집중식 보안(Centralized) 아키텍처

아키텍트의 실력은 보안을 '어디에' 위치시키느냐로 결정된다.

척도흩어진 보안 (안티패턴)중앙 집중식 보안 (프레임워크 융합)
코드 위치각 컨트롤러(Controller)나 서비스(Service) 함수 내부Filter, Interceptor, AOP, API Gateway
결합도비즈니스 로직과 보안 로직이 스파게티처럼 엉킴 (높음)비즈니스 로직은 순수하게 분리됨 (관심사 분리, 낮은 결합도)
유지보수성암호화 알고리즘(AES->RSA) 바꿀 때 코드 1,000개 다 뜯어고침중앙 CryptoService 딱 1곳의 클래스 1줄만 바꾸면 전사 적용 끝.
보안 구멍개발자가 피곤해서 검사 코드 딱 1개 빼먹으면 거기로 털림개발자가 빼먹고 싶어도 입구(게이트웨이)에서 강제로 검사하므로 0% 뚫림.

과목 융합 관점

  • 소프트웨어 공학 (AOP, 관점 지향 프로그래밍): 객체지향(OOP)의 한계를 부수고 보안의 패러다임을 바꾼 위대한 혁명이다. "로그 남기기", "권한 체크하기" 코드는 핵심 비즈니스 로직(송금하기)이 아니다. 하지만 모든 함수에 덕지덕지 붙어야 한다(Cross-cutting Concern). 스프링의 AOP 기술을 융합하면, 개발자는 그냥 transferMoney() 라는 순수 비즈니스 로직만 짜고 그 위에 @PreAuthorize("hasRole('USER')") 딱지 하나만 붙인다. 그러면 컴파일할 때 프레임워크가 알아서 보안 코드 100줄을 찰칵! 하고 위아래로 감싸서(Weaving) 실행해 주는 마법의 보안 코팅이 완성된다.

  • 클라우드 / MSA (사이드카 패턴, Sidecar Proxy): 코드를 섞는 것도 귀찮은 마이크로서비스 시대가 왔다. 아예 자바 코드(애플리케이션) 안에서 보안을 다 빼버렸다. 대신 앱 서버(컨테이너) 옆에 딱 붙어다니는 **사이드카(Sidecar, 예: Envoy 프록시)**라는 별도의 네트워크 봇을 띄운다. 모든 트래픽은 사이드카를 거쳐 앱으로 들어간다. 이 사이드카가 mTLS 암호화 통신, 토큰(JWT) 검증, 로깅을 100% 알아서 밖에서 다 처리해 주고 무균 상태의 순수한 데이터만 앱으로 던져준다. 개발자는 아예 보안의 존재조차 모르고 꿀을 빨게 되는 클라우드 네이티브 보안 아키텍처의 정점이다.

  • 📢 섹션 요약 비유: 흩어진 보안이 **'각 직원이 자기 책상 서랍에 자물쇠를 하나씩 사다 다는 것'**이라면, 중앙 집중식 보안(AOP/사이드카)은 **'사무실 건물 1층 로비에 거대한 엑스레이 검색대와 특수부대 경비원을 세워두는 것'**입니다. 1층 검색대만 완벽하면, 사무실 층(비즈니스 로직)에 올라온 직원들은 굳이 각자 총을 들고 다닐 필요 없이 평화롭게 자기 서류(업무) 작업에만 100% 몰입할 수 있습니다.


Ⅳ. 실무 적용 및 기술사적 판단

실무 시나리오

  1. 시나리오 — 난수 발생기(Random)의 나비효과, 세션 쿠키 대량 탈취: 인증 시스템을 직접 짠 스타트업. 비밀번호 찾기를 할 때 임시 토큰을 발급하는 로직에 Math.random()을 썼다. 이 함수는 현재 시간(Time)을 씨앗(Seed)으로 써서 가짜 난수를 뱉는다. 천재 해커가 임시 토큰 3개를 1초 간격으로 받아본 뒤, 수학적 역추적 알고리즘을 팽팽 돌려서 이 서버가 시간을 어떤 식으로 쪼개 난수를 만드는지 패턴을 100% 알아냈다. 5분 뒤, 해커는 1만 명의 비밀번호 초기화 토큰을 오차 없이 예측해 냈고 회사는 파산했다.

    • 아키텍트의 해결책: KISA 보안약점 2번 카테고리(보안 기능)의 절대 금기 위반이다. 보안 관련 인증 토큰이나 암호화 키를 만들 때는 '예측 가능성(Predictability)'이 1%라도 섞이면 끝장이다. 아키텍트는 린터(Linter) 규칙에 Math.random 금지령을 내리고, 반드시 OS의 커널 노이즈(키보드 딜레이, 마우스 움직임 등) 엔트로피(Entropy)를 긁어모아 수학적으로 절대 패턴을 찾을 수 없는 **CSPRNG (암호학적으로 안전한 의사 난수 생성기, 예: /dev/urandom, SecureRandom)**만을 사용하도록 중앙 보안 유틸리티 뼈대를 설계해 두어야 한다.
  2. 시나리오 — 하드코딩된 마스터 키의 깃허브(GitHub) 유출 참사: 백엔드 팀장이 보안을 신경 쓴다며 주민번호를 AES-256으로 완벽하게 암호화해서 DB에 넣었다. 그런데 정작 उस AES-256을 잠그고 푸는 비밀 키(Secret Key) 문자열을 application.properties 파일 안에 encrypt.key=MySecretKey123! 이라고 예쁘게 적어놓고 깃허브에 통째로 푸시(Push)했다. 1시간 뒤 중국 해커 봇이 깃허브를 크롤링해 이 키를 훔쳐 갔고, 나중에 DB를 해킹했을 때 이 키를 써서 주민번호 1,000만 건을 아주 편안하게 평문으로 복호화해버렸다.

    • 아키텍트의 해결책: 기밀 데이터 관리(Secret Management) 아키텍처의 부재다. 집문서(DB)를 금고에 넣고, 금고 열쇠(Key)를 집 현관문 앞에 예쁘게 포장해서 둔 꼴이다. 아키텍트는 소스 코드(Git) 내부에 그 어떤 비밀번호, API 키, 암호화 키도 들어가지 못하게 Git-secrets 스캐너로 빌드를 막아야 한다. 그리고 런타임에 서버가 뜰 때, 코드가 아닌 외부의 절대 금고인 AWS KMS (Key Management Service)HashiCorp Vault 에 다이렉트로 접속하여 메모리(RAM) 상으로만 키를 조용히 빨아먹고 휘발시키도록, 인프라와 앱을 완전히 찢어버리는(Decoupling) 완벽한 키 격리 설계를 완성해야 한다.

도입 체크리스트

  • 비즈니스적: "암호화로 인한 레이턴시(Latency) 병목을 성능 테스트(BMT) 했는가?" 보안 기능(특히 RSA 비대칭키 암호화나 Bcrypt 10회전 이상 해시)은 CPU 연산을 미친 듯이 갉아먹는다. "보안이 최고야!"라며 로그인 암호화 회전수를 100만 번으로 세팅했다가, 블랙프라이데이 때 동시 접속자 10만 명이 몰리면 로그인 서버의 CPU가 100%를 찍으며 장사가 멈춘다. 아키텍트는 **성능(Performance)과 보안성(Security)의 절대 타협점(Trade-off)**을 찾기 위해, 반드시 부하 테스트 툴(JMeter)로 "우리 서버 CPU가 이 암호화 강도를 초당 몇 건(TPS)이나 버틸 수 있는가"를 검증하고 Work Factor(연산 난이도)를 예술적으로 세팅해야 한다.
  • 기술적: 보안 필터의 실행 순서(Filter Chain Order)가 완벽한가? 중앙 병목점(Filter)에 여러 개의 보안 문지기를 세울 때, 문지기들의 순서가 꼬이면 해킹당한다. 1번 문지기(인증: 넌 누구야?)2번 문지기(인가: 관리자 권한 있어?)3번 문지기(입력값 검증: XSS 막기) 이 순서로 흘러가야 한다. 만약 순서가 꼬여서 "권한(인가)"을 먼저 물어보는데 "누구(인증)"인지 확인이 안 된 상태라면 널 포인터 에러가 나거나 해커에게 힌트를 주는 논리적 대참사가 발생한다. 프레임워크의 Security Filter Chain 순서를 엑스레이처럼 조감하고 꽉 틀어쥐는 것이 아키텍트의 기본 소양이다.

안티패턴

  • "보안 코드를 복사해서 붙여넣기 (Copy-Paste Security)": 중앙 보안 모듈(Common Module)을 만들지 않고, 구글 스택오버플로우에서 긁어온 AES 암호화 코드를 10개의 서비스 클래스에 각각 복붙(Copy-Paste)해서 박아넣는 악질 안티패턴. 3년 뒤 AES-256이 털려서 AES-GCM 방식으로 업그레이드해야 할 때, 개발자는 10군데의 코드를 다 찾아다니며 고쳐야 하고 1개라도 빼먹으면 거기로 털린다. 보안 기능은 절대 중복(DRY 원칙 위반)되어서는 안 되며, 전 우주에서 오직 단 1개의 클래스(Single Source of Truth)만이 책임을 독점해야 한다.

  • 📢 섹션 요약 비유: 보안 코드를 복붙하는 것은 집에 **'개별 건전지가 들어가는 화재경보기 10개'**를 다는 것과 같습니다. 건전지가 닳았을 때 10개를 일일이 열어서 갈아끼워야 하고, 화장실 경보기 건전지 갈기를 깜빡했다가 불이 나면 다 죽습니다. 중앙 집중식 보안(AOP/필터)은 집에 **'하나의 메인 두꺼비집에 유선으로 다 연결된 화재경보기 시스템'**을 까는 것입니다. 두꺼비집 하나만 점검하면 온 집안의 경보기가 100% 똑같은 최상의 컨디션으로 작동하는 완벽한 유지보수 아키텍처입니다.


Ⅴ. 기대효과 및 결론

정량/정성 기대효과

구분개발자 개개인의 보안 지식에 의존한 파편화 (AS-IS)중앙 공통 모듈 및 AOP 기반의 인프라적 방어 (TO-BE)개선 효과
정량보안 심사(KISA) 시 팀마다 제각각인 보안 결함 100건 적발공통 암호화/인증 모듈 강제화로 해당 약점 0건 도달보안 관련 디버깅 및 수정 리드타임 99% 쾌속 소멸
정량하드코딩된 암호 키 유출로 인한 2차 대형 사고 연 1회AWS KMS 등 외부 볼트(Vault) 연동으로 키 탈취 불가소스코드 유출 시에도 데이터베이스 복호화(피해) 리스크 0% 락인
정성"내가 짠 암호화 로직이 안전할까?" 끊임없는 불안감"프레임워크가 쳐둔 중앙 쉴드 뒤에 숨는다"는 안도감개발자의 보안 피로도(Fatigue) 소멸 및 비즈니스 로직(Core)에만 100% 몰입 환경 제공

미래 전망

  • 양자 컴퓨터(Quantum Computing)의 공포와 크립토 어질리티(Crypto-Agility): 10년 뒤 양자 컴퓨터가 상용화되면 현재 인류가 쓰는 모든 비대칭 키(RSA 등) 암호화 뼈대가 휴지 조각이 된다(Q-Day). 미래의 아키텍트는 "RSA 암호화 알고리즘"을 코드에 단단히 박아두면 안 된다. 언제든 양자 내성 암호(PQC) 알고리즘으로 스위치 한 번에 딸깍! 갈아 끼울 수 있도록 **암호화 민첩성(Crypto-Agility)**을 염두에 둔 초연결 인터페이스(Interface) 뼈대를 설계해 두어야만(Strategy Pattern 적용) 인류 최악의 양자 폭격에서 생존할 수 있다. (다음 장 506번 연계)
  • 비밀번호의 종말과 패스키(Passkey) 인프라로의 이주: "비밀번호를 어떻게 안전하게 짤 것인가?" (KDF, Bcrypt)라는 질문 자체가 박물관으로 향하고 있다. Apple, Google, MS가 연합한 FIDO 기반의 Passkey(패스키) 아키텍처는 아예 유저의 뇌 속에 비밀번호를 남겨두지 않는다. 스마트폰의 생체 정보(지문/안면)와 비대칭 키 서명만을 이용하여 서버와 통신하는 '비밀번호 없는 세상(Passwordless)'이 완성되면서, KISA의 '비밀번호 암호화' 항목 자체가 역사 속으로 소멸하는 거대한 패러다임 시프트가 시작되었다.

참고 표준

  • KISA 소프트웨어 보안약점 진단가이드 (2번: 보안 기능): "암호 키를 하드코딩하지 마라! 취약한 난수를 쓰지 마라!"라며, 개발자가 암호화와 인증을 핑계로 벌이는 가장 멍청한 코드 15가지를 무자비한 철퇴(정적 스캐너 Fail)로 찍어 누르는 대한민국 공공기관 절대 법전. (이전 장 497번)
  • Spring Security Architecture: 자바 백엔드 생태계를 지배하는 '보안 기능 설계'의 전 세계 압도적 끝판왕 바이블. "인증과 인가는 이렇게 Filter Chain으로 분리하고, 비밀번호는 이렇게 PasswordEncoder 인터페이스로 찢어야 한다"는 객체지향 보안 설계의 살아있는 성서.

보안 기능(Security Features)의 설계는 소프트웨어 공학이 '인간의 뇌 피지컬(개인의 역량)'에 대한 기대를 버리고, '프레임워크의 강제력(System)'을 통해 통제권을 획득해 낸 찬란한 산업 혁명이다. 장인 100명이 각자 망치질을 해서 만든 부품들은 이가 맞지 않고 빈틈(해킹 구멍)이 생긴다. 기술사는 개발자들에게 망치를 빼앗고 거대한 중앙 프레스 기계(공통 보안 프레임워크)를 설계하여 내려꽂아야 한다. "네가 천재든 바보든 상관없다. 로그인 필터를 거치지 않으면 네 로직은 0.1초도 숨 쉴 수 없으며, 내가 뚫어놓은 공통 암호화 파이프라인(KMS)을 통하지 않으면 네 데이터는 DB에 기록될 수조차 없다." 이처럼 모든 길목을 가장 차갑고 견고한 콘크리트(AOP/Filter)로 틀어막아, 인간의 멍청한 실수가 비집고 들어갈 1바이트의 틈새조차 원천 박멸해 버리는 것, 그것이 가장 완벽하고 게으른 보안 아키텍트의 위대한 폭정(Dictatorship)이다.

  • 📢 섹션 요약 비유: 흩어진 보안 기능 쌩코딩(Raw coding)은 **'모든 병사에게 방패를 나눠주고 각자 화살을 막으라고 하는 오합지졸 부대'**입니다. 병사 한 명만 실수로 방패를 내리면 거기로 화살(해킹)이 뚫고 들어와 진형이 붕괴합니다. 중앙 집중식 보안 기능 설계(아키텍처)는 **'거대한 강철 로마 팔랑크스 거북이 진형(Testudo)'**을 짜서, 병사들(비즈니스 로직)은 방패(보안)를 신경 쓰지 않고 오직 앞으로 창(기능)만 찌를 수 있게 만들고, 지휘관(프레임워크)이 거대한 전신 방패를 위에서부터 아래까지 100%의 무결성으로 덮어버리는 무적의 군단 설계술입니다.

📌 관련 개념 맵 (Knowledge Graph)

개념 명칭관계 및 시너지 설명
KISA 47개 보안약점 가이드"보안 기능"이라는 이 거대한 뼈대를 한국 실정에 맞게 15개의 룰로 쪼개어 린터(Linter) 기계에 먹여버린 K-보안의 절대 잣대. (이전 장 497번)
관점 지향 프로그래밍 (AOP)보안 설계의 영원한 구원자. 보안이라는 귀찮은 갑옷(로깅, 권한 체크)을 비즈니스 로직의 몸통에 1줄도 섞지 않고 겉옷처럼 찰칵! 입혔다 벗겼다 할 수 있는 스프링(Spring) 최고의 흑마법.
암호화 실패 (A02)보안 기능 설계를 잘못했을 때 터지는 OWASP의 처참한 징벌. 키 하드코딩, 낡은 MD5 사용 등 멍청한 코딩의 끝은 전 국민 주민번호 평문 유출이라는 뉴스 1면 대서특필이다. (이전 장 479번)
KMS (키 관리 시스템)아키텍트가 "소스코드(Git)에 비밀번호 절대 적지 마!"라고 소리쳤을 때, 대안으로 던져줘야 하는 가장 완벽한 해답(금고). AWS KMS에서 런타임에 1회용 키를 빼먹는 분리 아키텍처.
비밀번호 저장 방식 (Bcrypt 등)보안 기능 설계 중 '인증(Authentication)' 파트의 핵심 척추. 해커가 DB를 털어가더라도 풀 수 없도록 수학적 지연(Work Factor)을 걸어버리는 궁극의 단방향 해시 콤보. (다음 장 505번)

👶 어린이를 위한 3줄 비유 설명

  1. 레고로 마을을 만들었는데, 집마다 "우리 집 도둑 막는 법"을 각자 알아서 만들라고 했더니, 어떤 집은 튼튼한 자물쇠를 달았지만 어떤 집은 그냥 끈으로 대충 묶어놔서 도둑이 툭하면 들어왔어요!
  2. 그래서 마을 촌장님(아키텍트)이 화가 나서, 아예 마을 입구에 **"모든 사람이 똑같이 거쳐야 하는 초강력 전신 스캐너와 최첨단 경비실(공통 보안 모듈)"**을 쾅! 하고 지어버렸어요.
  3. 이제 마을 사람들은 자기 집에 도어록을 달 필요 없이 그냥 맘 편하게 잠만 자면 되죠! 이렇게 누가 만들든 똑같이 엄청 튼튼한 방어막을 시스템 한가운데 뼈대로 세워두는 똑똑한 설계를 **'보안 기능의 설계'**라고 부른답니다!