λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“–CS/πŸ“™Theory of Information Security

[μ •λ³΄λ³΄ν˜Έλ‘ ] Lecture3. Authentication(1)

by goguma.dev 2024. 10. 6.

β€» 이 μΉ΄ν…Œκ³ λ¦¬μ˜ 글듀은 knu JY.Lee κ΅μˆ˜λ‹˜μ˜ <μ •λ³΄λ³΄ν˜Έλ‘ > μˆ˜μ—…μ„ λ“£κ³  λ‚˜λ¦„λŒ€λ‘œ ν•„μžκ°€ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

β€» λΆ€μ‘±ν•œ μ„€λͺ…이 μžˆκ±°λ‚˜, 잘λͺ» μ•Œκ³  μž‘μ„±ν•œ 뢀뢄이 보인닀면 νŽΈν•˜κ²Œ λŒ“κΈ€λ‘œ μ•Œλ €μ£Όμ‹œλ©΄ 정말 κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€πŸ˜Š

 

1. Types of Authentication

Authentication(인증) vs. Authorization(κΆŒν•œ λΆ€μ—¬):

  • 인증(Authentication): μ‚¬μš©μžκ°€ μžμ‹ μ΄ λˆ„κ΅¬λΌκ³  μ£Όμž₯ν•˜λŠ” μ‚¬λžŒμΈμ§€λ₯Ό ν™•μΈν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 즉, "당신이 λˆ„κ΅¬λΌκ³  μ£Όμž₯ν•˜λŠ” μ‚¬λžŒμ΄ λ§žμŠ΅λ‹ˆκΉŒ?"λΌλŠ” μ§ˆλ¬Έμ— λ‹΅ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

Authentication의 단계 - 본인을 인증

  • κΆŒν•œ λΆ€μ—¬(Authorization): μ‚¬μš©μžκ°€ μžμ›μ— μ ‘κ·Όν•  κΆŒν•œμ΄ μžˆλŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 즉, "당신이 μš”μ²­ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  κΆŒν•œμ΄ μžˆμŠ΅λ‹ˆκΉŒ?"λΌλŠ” μ§ˆλ¬Έμ— λ‹΅ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.
  • 인증과 κΆŒν•œ λΆ€μ—¬λŠ” λ³΄μ•ˆμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. (이번 μž₯μ—μ„œλŠ” Authentication에 λŒ€ν•΄μ„œ, λ‹€μŒ μž₯μ—μ„œλŠ” Authorization에 λŒ€ν•΄μ„œ λ°°μ›Œλ΄…μ‹œλ‹€.)

 

User Authentication μ‚¬μš©μž 인증:

  • 인증 방법: μ‚¬μš©μžμ˜ 신원을 ν™•μΈν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ 방법이 μžˆμŠ΅λ‹ˆλ‹€.
    • 무엇을 μ•Œκ³  μžˆλŠ”κ°€(What you know): νŒ¨μŠ€μ›Œλ“œλ‚˜ λ³΄μ•ˆ 질문의 닡을 μ•Œκ³  μžˆλŠ”μ§€.
    • 무엇을 가지고 μžˆλŠ”κ°€(What you have): μŠ€λ§ˆνŠΈμΉ΄λ“œλ‚˜ ν•˜λ“œμ›¨μ–΄ 토큰과 같은 물리적 μž₯치λ₯Ό 가지고 μžˆλŠ”μ§€.
    • 무엇인가(Who you are): 생체 정보(지문, μ–Όκ΅΄ 인식 λ“±)λ₯Ό 기반으둜 신원을 ν™•μΈν•©λ‹ˆλ‹€.
    • 어디에 μžˆλŠ”κ°€(Where you are): μ‚¬μš©μžμ˜ IP μ£Όμ†Œλ‚˜ GPS μœ„μΉ˜ 정보λ₯Ό μ‚¬μš©ν•˜μ—¬ 인증을 κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 인증 강도: 인증의 κ°•λ„λŠ” μœ„μ‘°μ˜ 어렀움에 따라 κ²°μ •λ˜λ©°, μ—¬λŸ¬ 인증 μš”μ†Œλ₯Ό κ²°ν•©ν• μˆ˜λ‘ μ‚¬μš©μžκ°€ μžμ‹ μ΄ μ£Όμž₯ν•˜λŠ” μ‚¬λžŒμž„μ„ 더 ν™•μ‹€νžˆ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 


2. Password-based Authentication

λ¨Όμ € νŒ¨μŠ€μ›Œλ“œ 기반의 인증에 λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€.

 

  • νŒ¨μŠ€μ›Œλ“œμ˜ μ—­ν• : νŒ¨μŠ€μ›Œλ“œλŠ” 인증 κ³Όμ •μ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€. μ‚¬μš©μžλŠ” λΉ„λ°€ νŒ¨μŠ€μ›Œλ“œλ₯Ό 가지고 있고, μ‹œμŠ€ν…œμ€ 이 νŒ¨μŠ€μ›Œλ“œλ₯Ό ν™•μΈν•˜μ—¬ μ‚¬μš©μžμ˜ 신원을 μΈμ¦ν•©λ‹ˆλ‹€.
  • νŒ¨μŠ€μ›Œλ“œκ°€ 널리 μ‚¬μš©λ˜λŠ” 이유:
    • μ‚¬μš©ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.
    • λ°°ν¬ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.
    • νœ΄λŒ€ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
    • ν˜„μž¬λ‘œμ„œλŠ” λͺ¨λ“  문제λ₯Ό ν•΄κ²°ν•  "만λŠ₯" λŒ€μ•ˆμ΄ μ—†μŠ΅λ‹ˆλ‹€. (νŒ¨μŠ€μ›Œλ“œλ„ λ³΄μ•ˆμ˜ μœ„ν—˜μ΄ ν¬μ§€λ§Œ λ‹€λ₯Έ 더 효율적인 λŒ€μ•ˆμ΄ μ—†μŒ)

 

Password Security Risks νŒ¨μŠ€μ›Œλ“œ λ³΄μ•ˆ μœ„ν—˜

  • ν‚€λ‘œκΉ…(Keystroke logging):
    • ν•˜λ“œμ›¨μ–΄ ν‚€λ‘œκ±°: ν‚€μŠ€νŠΈλ‘œν¬λ₯Ό κΈ°λ‘ν•˜λŠ” μž₯치둜, KeyGhost, KeyShark 등이 μžˆμŠ΅λ‹ˆλ‹€.
    • μ†Œν”„νŠΈμ›¨μ–΄ μŠ€νŒŒμ΄μ›¨μ–΄: ν‚€ μž…λ ₯을 κΈ°λ‘ν•˜λŠ” μ•…μ„± ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.
  • μ–΄κΉ¨ λ„ˆλ¨Έλ‘œ 엿보기(Shoulder surfing): λ‹€λ₯Έ μ‚¬λžŒμ΄ νŒ¨μŠ€μ›Œλ“œλ₯Ό μž…λ ₯ν•˜λŠ” 것을 λͺ°λž˜ μ—Ώλ³΄λŠ” κ³΅κ²©μž…λ‹ˆλ‹€.
  • μ—¬λŸ¬ μ‚¬μ΄νŠΈμ—μ„œ 같은 νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‚¬μš©: ν•˜λ‚˜μ˜ μ‚¬μ΄νŠΈμ—μ„œ νŒ¨μŠ€μ›Œλ“œκ°€ 유좜되면, λ‹€λ₯Έ μ‚¬μ΄νŠΈμ—μ„œλ„ λ™μΌν•œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  경우 연쇄적인 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.
  • μ‚¬νšŒ 곡학(Social engineering): μΈκ°„μ˜ 심리λ₯Ό μ΄μš©ν•΄ νŒ¨μŠ€μ›Œλ“œλ₯Ό μœ μΆœν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ†μž„μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžκ°€ νŒ¨μŠ€μ›Œλ“œλ₯Ό κ³΅κ°œν•˜λ„λ‘ μœ λ„ν•©λ‹ˆλ‹€.

 

How do attackers use passwords? 

κ³΅κ²©μžλŠ” νŒ¨μŠ€μ›Œλ“œλ₯Ό λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μ•…μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 이메일 및 μ‚¬μš©μž 이름 μΆ”μΆœ: μ‚¬μš©μžκ°€ μ—¬λŸ¬ μ„œλΉ„μŠ€μ—μ„œ λ™μΌν•œ μ΄λ©”μΌμ΄λ‚˜ μ‚¬μš©μž 이름을 μ‚¬μš©ν•  κ°€λŠ₯성이 크기 λ•Œλ¬Έμ—, 이λ₯Ό 톡해 λ‹€λ₯Έ μ„œλΉ„μŠ€μ—λ„ 접근을 μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • κ°€μž₯ ν”ν•œ νŒ¨μŠ€μ›Œλ“œλ₯Ό ν•™μŠ΅: κ³΅κ²©μžλŠ” μ‚¬μš©μžκ°€ 자주 μ‚¬μš©ν•˜λŠ” νŒ¨μŠ€μ›Œλ“œλ₯Ό ν•™μŠ΅ν•˜κ³  이λ₯Ό 기반으둜 곡격을 μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • νŠΉμ • μ‚¬μš©μžμ˜ νŒ¨μŠ€μ›Œλ“œ νŒŒμ•…: 유좜된 μ •λ³΄λ‘œ νŠΉμ • μ‚¬μš©μžμ˜ νŒ¨μŠ€μ›Œλ“œλ₯Ό νŒŒμ•…ν•˜κ³ , 이λ₯Ό μ΄μš©ν•˜μ—¬ λ‹€μ–‘ν•œ μ„œλΉ„μŠ€μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

Credential Stuffing 자격 증λͺ… μ±„μš°κΈ°

Credential Stuffing은 유좜된 자격 증λͺ…을 ν™œμš©ν•˜μ—¬ μžλ™ν™”λœ 둜그인 μ‹œλ„λ₯Ό ν•˜λŠ” κ³΅κ²©μž…λ‹ˆλ‹€. 이 곡격은 λ§Žμ€ μ‚¬μš©μžκ°€ μ—¬λŸ¬ μ‚¬μ΄νŠΈμ—μ„œ λ™μΌν•œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μž¬μ‚¬μš©ν•˜λŠ” μŠ΅κ΄€μ„ μ•…μš©ν•˜μ—¬ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— μ‚¬μš©μžλŠ” 각 μ‚¬μ΄νŠΈμ—μ„œ κ³ μœ ν•œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜κ³ , 이쀑 인증과 같은 λ³΄μ•ˆ 쑰치λ₯Ό 톡해 μžμ‹ μ˜ 계정을 λ³΄ν˜Έν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

유좜된 νŒ¨μŠ€μ›Œλ“œλ₯Ό 가지고 μžλ™μœΌλ‘œ λ‹€λ₯Έ μ‚¬μ΄νŠΈλ“€μ— λ‘œκ·ΈμΈμ„ μ‹œλ„ν•˜λŠ” λͺ¨μŠ΅


2-2. Security Considerations

νŒ¨μŠ€μ›Œλ“œ 기반 인증을 μ‚¬μš©ν•  λ•Œ, λ³΄μ•ˆ 고렀사항과 곡격 λͺ¨λΈμ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€.

Security Considerations (λ³΄μ•ˆ 고렀사항)

  • νŒ¨μŠ€μ›Œλ“œμ˜ 톡신 방식(How is the password communicated?):
    • νŒ¨μŠ€μ›Œλ“œκ°€ ν†΅μ‹ λ˜λŠ” 방식은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. λ§Œμ•½ 톡신 쀑에 νŒ¨μŠ€μ›Œλ“œκ°€ 도청당할 μœ„ν—˜μ΄ μžˆλ‹€λ©΄ 큰 λ³΄μ•ˆ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•”ν˜Έν™” κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • νŒ¨μŠ€μ›Œλ“œμ˜ μ €μž₯ 방식(How is the password stored?) _ 이번 μž₯μ—μ„œλŠ” 여기에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ΄…μ‹œλ‹€!
    • νŒ¨μŠ€μ›Œλ“œκ°€ λͺ…ν™•ν•œ ν…μŠ€νŠΈλ‘œ μ €μž₯λ˜λŠ”μ§€, μ•”ν˜Έν™”λ˜μ—ˆλŠ”μ§€, ν•΄μ‹œ μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€μ— 따라 λ³΄μ•ˆ μˆ˜μ€€μ΄ λ‹¬λΌμ§‘λ‹ˆλ‹€. ν•΄μ‹œ 처리된 νŒ¨μŠ€μ›Œλ“œλŠ” 더 μ•ˆμ „ν•˜μ§€λ§Œ, λ‹¨μˆœν•œ μ•”ν˜Έν™”λŠ” 해킹에 μ·¨μ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œμ΄ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ–΄λ–»κ²Œ ν™•μΈν•˜λŠ”κ°€(How does the system check the password?):
    • μ‹œμŠ€ν…œμ΄ νŒ¨μŠ€μ›Œλ“œλ₯Ό ν™•μΈν•˜λŠ” 방식은 μ€‘μš”ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 κ³΅κ²©μžκ°€ μ‰½κ²Œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μΆ”μΈ‘ν•˜κ±°λ‚˜ μš°νšŒν•˜μ§€ λͺ»ν•˜λ„둝 ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • νŒ¨μŠ€μ›Œλ“œλ₯Ό μΆ”μΈ‘ν•˜κΈ° μ‰¬μš΄κ°€?(How easy is it to guess the password?):
    • κΈ°μ–΅ν•˜κΈ° μ‰¬μš΄ νŒ¨μŠ€μ›Œλ“œλŠ” μ’…μ’… μΆ”μΈ‘ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ³΄μ•ˆμ„± 높은 λ³΅μž‘ν•œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

 

Attack Model 곡격 λͺ¨λΈ

  • 온라인 곡격자(Online attacker):
    • 온라인 κ³΅κ²©μžλŠ” 반볡적으둜 νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‹œλ„ν•˜μ—¬ μ„œλΉ„μŠ€μ— λ‘œκ·ΈμΈν•˜λ €κ³  ν•©λ‹ˆλ‹€. 성곡 μ—¬λΆ€λ₯Ό ν™•μΈν•˜λ©° μ§€μ†μ μœΌλ‘œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‹œλ„ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  • μ˜€ν”„λΌμΈ 곡격자(Offline attacker):
    • μ˜€ν”„λΌμΈ κ³΅κ²©μžλŠ” νŒ¨μŠ€μ›Œλ“œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 훔쳐내고, κ·Έ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 νŒ¨μŠ€μ›Œλ“œλ₯Ό λ³΅κ΅¬ν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€. 주둜 사전 곡격(Dictionary attack)이라고 뢈리며, 사전에 μ •μ˜λœ νŒ¨μŠ€μ›Œλ“œ λͺ©λ‘μ„ μ‚¬μš©ν•˜μ—¬ νŒ¨μŠ€μ›Œλ“œλ₯Ό μΆ”μΈ‘ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  • λŒ€μƒ μ‚¬μš©μž:
    • κ³΅κ²©μžλŠ” ν•œ λͺ…μ˜ μ‚¬μš©μžλ§Œμ„ λͺ©ν‘œλ‘œ ν•  μˆ˜λ„ 있고, λͺ¨λ“  μ‚¬μš©μžλ‚˜ λ‹€μˆ˜μ˜ μ‚¬μš©μž 계정을 λͺ©ν‘œλ‘œ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 곡격 λŒ€μƒμ— 따라 μ „λž΅μ΄ λ‹¬λΌμ§‘λ‹ˆλ‹€.

 

Online Attacker (온라인 곡격자)

  • 온라인 곡격자λ₯Ό νƒμ§€ν•˜λŠ” 방법:
    • λ„ˆλ¬΄ λ§Žμ€ μ‹œλ„: ν•œ μ‚¬μš©μžκ°€ μ§€λ‚˜μΉ˜κ²Œ λ§Žμ€ 둜그인 μ‹œλ„λ₯Ό ν•˜λ©΄, μ΄λŠ” 온라인 곡격의 징후일 수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ‹€μˆ˜μ˜ 계정을 μ‹œλ„: κ³΅κ²©μžκ°€ ν•˜λ‚˜μ˜ 계정이 μ•„λ‹ˆλΌ μ—¬λŸ¬ 계정을 λŒ€μƒμœΌλ‘œ 둜그인 μ‹œλ„λ₯Ό ν•˜λŠ” 것도 곡격의 μ§•ν›„μž…λ‹ˆλ‹€.
  • λŒ€μ‘ 방법:
    • CAPTCHA: 봇과 μ‹€μ œ μ‚¬μš©μžλ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ CAPTCHAλ₯Ό μ‚¬μš©ν•˜μ—¬ μžλ™ν™”λœ 곡격을 막을 수 μžˆμŠ΅λ‹ˆλ‹€.
    • IP μ£Όμ†Œ μΌμ‹œ 차단: 곡격이 νƒμ§€λ˜λ©΄ ν•΄λ‹Ή IP μ£Όμ†Œλ₯Ό μ°¨λ‹¨ν•˜κ±°λ‚˜, μš”μ²­ 속도λ₯Ό μ œν•œν•˜λŠ” λ°©μ‹μœΌλ‘œ λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, 곡격이 λΆ„μ‚°λœ 경우(예: λΆ„μ‚° μ„œλΉ„μŠ€ κ±°λΆ€ 곡격) νš¨κ³Όκ°€ μ œν•œμ μΌ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 계정 잠금: 곡격이 νƒμ§€λ˜λ©΄ 계정을 μž κΈ€ 수 μžˆμ§€λ§Œ, μ΄λŠ” μ‚¬μš©μžμ˜ 계정 접근성을 ν•΄μΉ  수 μžˆμ–΄ 자주 μ‚¬μš©λ˜λŠ” 방법은 μ•„λ‹™λ‹ˆλ‹€.

Offline Attacker (μ˜€ν”„λΌμΈ 곡격자)

  • μ˜€ν”„λΌμΈ κ³΅κ²©μžλŠ” μ–΄λ–»κ²Œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ–»λŠ”κ°€?:
    • μ„œλ²„μ— μΉ¨μž…ν•˜κ±°λ‚˜, 자격 증λͺ… μΆ”μΈ‘(Credential Guessing), SQL μΈμ μ…˜(SQL Injection), 원격 λͺ…λ Ή μ‹€ν–‰(Remote Command Execution) 등을 톡해 νŒ¨μŠ€μ›Œλ“œλ₯Ό ν¬ν•¨ν•œ 자격 증λͺ… 리슀트λ₯Ό νšλ“ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • νŒ¨μŠ€μ›Œλ“œλ₯Ό μ–΄λ–»κ²Œ μ €μž₯ν•΄μ•Ό ν•˜λŠ”κ°€?:
    • νŒ¨μŠ€μ›Œλ“œλ₯Ό ν‰λ¬ΈμœΌλ‘œ μ €μž₯ν•˜λ©΄ μ•ˆ λœλ‹€λŠ” 것이 λͺ…λ°±ν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μ–΄λ–»κ²Œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜κ³ , μ‚¬μš©μž 인증을 ν•  λ•Œλ„ 이λ₯Ό 체크할 수 μžˆμ„κΉŒμš”? 이 μž₯을 계속 κ³΅λΆ€ν•˜λ©΄ μ•Œμ•„λ΄…μ‹œλ‹€.

Facebook νŒ¨μŠ€μ›Œλ“œ 평문 μ €μž₯ 사건

  • Facebook이 μˆ˜μ–΅ 개의 νŒ¨μŠ€μ›Œλ“œλ₯Ό ν‰λ¬ΈμœΌλ‘œ μ €μž₯ν•œ 사건을 μ–ΈκΈ‰ν•˜λ©°, 이 λ¬Έμ œλŠ” λ³΄μ•ˆμ˜ κΈ°λ³Έ 원칙이 항상 μ§€μΌœμ§€μ§€ μ•ŠμŒμ„ λ³΄μ—¬μ€λ‹ˆλ‹€.
  • The Verge 기사: 2019λ…„ 3월에 λ³΄λ„λœ μ‚¬κ±΄μœΌλ‘œ, Facebook이 μˆ˜μ–΅ 개의 μ‚¬μš©μž νŒ¨μŠ€μ›Œλ“œλ₯Ό μ•”ν˜Έν™”ν•˜μ§€ μ•Šκ³  ν‰λ¬ΈμœΌλ‘œ μ €μž₯ν•œ 사싀이 λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€. μ΄λŠ” λŒ€ν˜• κΈ°μ—…μ‘°μ°¨ λ³΄μ•ˆμ— μ‹€μˆ˜κ°€ μžˆμ„ 수 μžˆλ‹€λŠ” 것을 λ³΄μ—¬μ€λ‹ˆλ‹€.

 

그럼 νŒ¨μŠ€μ›Œλ“œλ₯Ό μ €μž₯ν•  λ•Œ 평문이 μ•„λ‹ˆλΌ μ–΄λ–»κ²Œ μ €μž₯ν•  수 μžˆμ„κΉŒμš”?

λ¨Όμ € λΉ„λ°€λ²ˆν˜Έ 평문을 λΉ„λ°€ν‚€λ₯Ό μ΄μš©ν•΄ μ•”ν˜Έν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ•”ν˜Έν™” 방식: λͺ¨λ“  νŒ¨μŠ€μ›Œλ“œλ₯Ό λΉ„λ°€ ν‚€λ‘œ μ•”ν˜Έν™”ν•˜κ³ , μ„œλ²„ λ©”λͺ¨λ¦¬μ— μ €μž₯된 λΉ„λ°€ ν‚€λ₯Ό μ‚¬μš©ν•΄ ν•„μš”ν•  λ•Œ λ³΅ν˜Έν™”ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  • 문제점:
    • ν‚€ νƒˆμ·¨ μœ„ν—˜: κ³΅κ²©μžκ°€ μ„œλ²„μ— μΉ¨μž…ν•˜μ—¬ λΉ„λ°€ ν‚€λ₯Ό νƒˆμ·¨ν•˜λ©΄, λͺ¨λ“  νŒ¨μŠ€μ›Œλ“œλ₯Ό λ³΅ν˜Έν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • κ΄€λ¦¬μžμ˜ μ ‘κ·Ό 문제: κ΄€λ¦¬μžλŠ” λΉ„λ°€ ν‚€λ₯Ό 톡해 λͺ¨λ“  μ‚¬μš©μžμ˜ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŠ” λ³΄μ•ˆμƒ λ°”λžŒμ§ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ΄€λ¦¬μžλŠ” μ‚¬μš©μžμ˜ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ•Œ μ΄μœ κ°€ μ—†μŠ΅λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Hashing 기법이 μžˆμŠ΅λ‹ˆλ‹€.

  • ν•΄μ‹±μ˜ κ°œλ…: μ‚¬μš©μžμ˜ νŒ¨μŠ€μ›Œλ“œ λŒ€μ‹  ν•΄μ‹œκ°’(Hash)을 μ €μž₯ν•©λ‹ˆλ‹€. ν•΄μ‹œ ν•¨μˆ˜λŠ” μž„μ˜μ˜ 길이의 데이터λ₯Ό κ³ μ •λœ 길이의 λΉ„νŠΈ λ¬Έμžμ—΄λ‘œ λ§€ν•‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μ•”ν˜Έν™”μ™€λŠ” 달리, 해싱은 일방ν–₯μ„±(one-way property)을 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  • μ €μž₯ 방식: μ‹œμŠ€ν…œμ€ μ‚¬μš©μž 이름과 ν•΄μ‹œκ°’λ§Œ μ €μž₯ν•˜λ©°, μ‹€μ œ νŒ¨μŠ€μ›Œλ“œλŠ” μ €μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • μž₯점: ν•΄μ‹œκ°’μ€ λ³΅ν˜Έν™”ν•  수 μ—†κΈ° λ•Œλ¬Έμ—, νŒ¨μŠ€μ›Œλ“œ 파일이 μœ μΆœλ˜μ–΄λ„ 좔츑을 ν†΅ν•΄μ„œλ§Œ ν•΄μ‹œκ°’μ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

해싱은 λ³΅ν˜Έν™”λž€ κ°œλ…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— νŒ¨μŠ€μ›Œλ“œμ˜ ν•΄μ‹œκ°’μ΄ μœ μΆœλ˜λ”λΌλ„ 비ꡐ적 μ•ˆμ „ν•©λ‹ˆλ‹€.

Hash ν•¨μˆ˜μ˜ μ˜ˆμ‹œ

 

 

Avalanche Effect (Avalanche 효과)

μ•½κ°„μ˜ 평문 변화에도 ν•΄μ‹œ 값이 크게 λ°”λ€ŒλŠ” νŠΉμ§•μž…λ‹ˆλ‹€.

Avalanche 효과 μ„€λͺ…

 

 

해싱이 μ‚¬μš©λ˜λŠ” μ ˆμ°¨λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€:

  • μ‚¬μš©μžκ°€ μž…λ ₯ν•œ νŒ¨μŠ€μ›Œλ“œλ₯Ό ν•΄μ‹±ν•©λ‹ˆλ‹€.
  • ν•΄λ‹Ή ν•΄μ‹œκ°’μ„ μ €μž₯된 ν•΄μ‹œκ°’κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
  • ν•΄μ‹œκ°’μ΄ μΌμΉ˜ν•˜λ©΄, μ‚¬μš©μžκ°€ μž…λ ₯ν•œ νŒ¨μŠ€μ›Œλ“œκ°€ λ§žλŠ” κ²ƒμœΌλ‘œ νŒλ‹¨ν•©λ‹ˆλ‹€.

 

해싱을 μ‚¬μš©ν•˜λŠ” 것이 이전보닀 λ‚˜μ€ λ°©λ²•μ΄μ§€λ§Œ, μ—¬μ „νžˆ λͺ‡ 가지 λ¬Έμ œκ°€ 남아 μžˆμŠ΅λ‹ˆλ‹€.

  • 같은 νŒ¨μŠ€μ›Œλ“œλ₯Ό 가진 λ‹€λ₯Έ μ‚¬μš©μž: 두 λͺ…μ˜ μ‚¬μš©μžκ°€ λ™μΌν•œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  경우, λ™μΌν•œ ν•΄μ‹œκ°’μ„ κ°€μ§€κ²Œ λ©λ‹ˆλ‹€.
  • 레인보우 ν…Œμ΄λΈ” 곡격(rainbow tables): κ³΅κ²©μžλŠ” 자주 μ‚¬μš©ν•˜λŠ” νŒ¨μŠ€μ›Œλ“œλ“€μ˜ ν•΄μ‹œκ°’μ„ 미리 계산해 두고, 이λ₯Ό μ΄μš©ν•˜μ—¬ μ—¬λŸ¬ 계정에 μ‹œλ„ν•˜λŠ” λ°©μ‹μœΌλ‘œ 곡격할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

Salting!

  • μ†”νŒ…μ˜ κ°œλ…: μ‚¬μš©μž νŒ¨μŠ€μ›Œλ“œλ₯Ό λ‹¨μˆœνžˆ ν•΄μ‹±ν•˜λŠ” λŒ€μ‹ , 각 μ‚¬μš©μžλ§ˆλ‹€ κ³ μœ ν•œ 랜덀 κ°’(Salt)을 νŒ¨μŠ€μ›Œλ“œμ— μΆ”κ°€ν•œ ν›„ ν•΄μ‹±ν•©λ‹ˆλ‹€.

Salting μ˜ˆμ‹œ

  • μ˜ˆμ‹œ
    • SHA256을 μ‚¬μš©ν•˜μ—¬ "mysecretpassword"λ₯Ό ν•΄μ‹±ν•˜λ©΄ νŠΉμ •ν•œ ν•΄μ‹œκ°’μ΄ μƒμ„±λ©λ‹ˆλ‹€.
    • κ·ΈλŸ¬λ‚˜, "mysecretpassword"에 μ‚¬μš©μžλ³„λ‘œ κ³ μœ ν•œ μ†”νŠΈκ°’(예: 199654)을 μΆ”κ°€ν•œ ν›„ ν•΄μ‹±ν•˜λ©΄ μ™„μ „νžˆ λ‹€λ₯Έ ν•΄μ‹œκ°’μ„ μ–»κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ λ™μΌν•œ νŒ¨μŠ€μ›Œλ“œλΌλ„ μ†”νŠΈ 값에 따라 λ‹€λ₯Έ ν•΄μ‹œκ°’μ΄ μƒμ„±λ©λ‹ˆλ‹€.

 

Salting Steps (μ†”νŒ… 절차)

  • μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈν•  λ•Œ λ‹€μŒ 절차λ₯Ό λ”°λ¦…λ‹ˆλ‹€:
    1. λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 μ†”νŠΈ 값을 μ‚¬μš©μž μž…λ ₯ νŒ¨μŠ€μ›Œλ“œμ— μ—°κ²°ν•©λ‹ˆλ‹€.
    2. 전체 λ¬Έμžμ—΄μ„ ν•΄μ‹±ν•©λ‹ˆλ‹€.
    3. 이 ν•΄μ‹œκ°’μ„ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 ν•΄μ‹œκ°’κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
    4. 두 ν•΄μ‹œκ°’μ΄ μΌμΉ˜ν•˜λ©΄ μž…λ ₯된 νŒ¨μŠ€μ›Œλ“œκ°€ μ •ν™•ν•˜λ‹€κ³  νŒλ‹¨ν•©λ‹ˆλ‹€.
  • 레인보우 ν…Œμ΄λΈ” 방지: 미리 κ³„μ‚°λœ ν•΄μ‹œκ°’ ν…Œμ΄λΈ”(레인보우 ν…Œμ΄λΈ”)은 더 이상 νš¨κ³Όκ°€ μ—†μŠ΅λ‹ˆλ‹€. κ³΅κ²©μžλŠ” 맀번 μ‹€μ‹œκ°„μœΌλ‘œ 해싱을 μˆ˜ν–‰ν•΄μ•Ό ν•˜λ―€λ‘œ, νŒ¨μŠ€μ›Œλ“œλ₯Ό μΆ”μΈ‘ν•˜κΈ°κ°€ 훨씬 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
  • λ‹€λ₯Έ μ‚¬μš©μž: 같은 νŒ¨μŠ€μ›Œλ“œλ₯Ό 가진 μ‚¬μš©μžλΌλ„, μ„œλ‘œ λ‹€λ₯Έ μ†”νŠΈ κ°’μœΌλ‘œ 인해 각각 λ‹€λ₯Έ ν•΄μ‹œκ°’μ„ κ°€μ§‘λ‹ˆλ‹€.

Summary

이번 κΈ€μ—μ„œλŠ” Authentication(인증)κ³Ό Authorization(κΆŒν•œ λΆ€μ—¬)의 차이에 λŒ€ν•΄ μ‚΄νŽ΄λ³Έ ν›„, νŒ¨μŠ€μ›Œλ“œ 기반 인증 방법에 λŒ€ν•΄ κ³΅λΆ€ν–ˆμŠ΅λ‹ˆλ‹€.

νŒ¨μŠ€μ›Œλ“œ 기반 μΈμ¦μ—μ„œ μ–΄λ–»κ²Œ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•  수 μžˆμ„κΉŒ?에 λŒ€ν•΄μ„œλŠ” hashingκ³Ό salting을 μ΄μš©ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ κΈ€μ—μ„œλŠ” 2-2μž₯, λ³΄μ•ˆ 고렀사항 파트의 How does the system check the password? (μ–΄λ–»κ²Œ μ‹œμŠ€ν…œμ΄ λΉ„λ°€λ²ˆν˜Έλ₯Ό ν™•μΈν•˜λŠ”μ§€)에 λŒ€ν•΄ μ΄μ–΄μ„œ κ³΅λΆ€ν•˜κ² μŠ΅λ‹ˆλ‹€. πŸ˜†