🌻 JAVA/정리정리정리

ν•΄μ‹œ(Hash)?μ†”νŠΈ(Salt)? νŒ¨μŠ€μ›Œλ“œ μ•”ν˜Έν™” λŒ€ν•΄μ„œ

2022. 2. 21. 23:53
λͺ©μ°¨
  1. ν•΄μ‹œλ₯Ό ν†΅ν•œ μ•”ν˜Έν™”
  2. ν•˜μ§€λ§Œ, λ™μΌν•œ λ‹€μ΄μ œμŠ€νŠΈ..
  3. Saltλž€?
  4. Salt + μ—¬λŸ¬λ²ˆ ν•΄μ‹±ν•˜κΈ°
  5. REFERENCES
λ°˜μ‘ν˜•

ν•΄μ‹œλ₯Ό ν†΅ν•œ μ•”ν˜Έν™”

 

Hash(ν•΄μ‹œ)λž€? λ‹¨λ°©ν–₯ μ•”ν˜Έν™” κΈ°λ²•μœΌλ‘œ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 μ•”ν˜Έν™” 된 λ¬Έμžμ—΄μ„ λ§Œλ“œλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
ex) SHA-256, Bcrypt ..

μ‚¬μš©μžμ˜ νŒ¨μŠ€μ›Œλ“œλŠ” ν‰λ¬ΈμœΌλ‘œ μ €μž₯ν•˜λŠ” 것은 μœ„ν—˜ν•œ μΌμž…λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 보톡 ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 μ•”ν˜Έν™”λ₯Ό μ§„ν–‰ν•˜κ²Œ λ˜λŠ”λ°, 이도 κ·Έλ ‡κ²Œ μ•ˆμ „ν•œ 것은 μ•„λ‹™λ‹ˆλ‹€. κ³΅κ²©μžκ°€ λͺ¨λ“  평문을 ν•΄μ‹œν™”ν•˜μ—¬ λŒ€μ‘°λ₯Ό ν•˜μ—¬ νŒ¨μŠ€μ›Œλ“œλ₯Ό μ•Œμ•„λ‚Ό μˆ˜λ„ μžˆλ‹€λŠ” λœ»μž…λ‹ˆλ‹€.

  • ν•΄μ»€λŠ” λ¬΄ν•œλŒ€λ‘œ 곡격을 ν•œλ‹€λ©΄ μ–΄λ–€ μ•”ν˜Έν™”λ₯Ό 해도 νŒ¨μŠ€μ›Œλ“œλ₯Ό μ•Œμ•„λ‚Ό 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ 해컀듀이 λ¬΄ν•œλŒ€λ‘œ 곡격을 ν•  수 μžˆμ„κΉŒμš”? X
    • 해독할 λ•Œ μ‘°κΈˆμ΄λΌλ„ 더 μ•”ν˜Έν™”λ₯Ό ν•΄μ„œ ν•΄μ»€λ“€μ—κ²Œ 단 λͺ‡μ΄ˆλΌλ„ μ§€μ—°μ‹œν‚¬ 수 μžˆλ‹€λ©΄ ν•΄μ»€λ“€μ—κ²ŒλŠ” 치λͺ…적인 μ‹œκ°„μ΄ 될 수 μžˆμŠ΅λ‹ˆλ‹€.
더보기

μ•”ν˜Έλ₯Ό ν•΄λ…ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„

μ‘°ν•© κ°€λŠ₯ν•œ λͺ¨λ“  λ¬Έμžμ—΄μ„ λŒ€μž…ν•˜κΈ° λ•Œλ¬Έμ— 아무리 컴퓨터가 λΉ λ₯΄λ‹€κ³  ν•˜λ”λΌλ„ μ‹œκ°„μ΄ 맀우 많이 κ±Έλ¦°λ‹€. λ‹Ήμž₯ 영문 μ†Œλ¬Έμž + 숫자 μ‘°ν•©λ§Œ 쳐도 nn자리의 μ•”ν˜Έλ₯Ό λš«λŠ” λ°μ—λŠ” O(36^n)의 μ‹œκ°„μ΄ κ±Έλ¦°λ‹€. 즉, 10κΈ€μžλ§Œ λ˜μ–΄λ„ 3610 = 3,656,158,440,062,976 κ°€μ§€κ°€ λœλ‹€. 이 정도면 μ‰¬μš΄ μ•”ν˜Έ μ•Œκ³ λ¦¬μ¦˜μ΄λΌ 해도 μ΄ˆλ‹Ή 1μ–΅ 번 계산 κΈ°μ€€ λŒ€μΆ© 14κ°œμ›” κ±Έλ¦¬λŠ” μˆ˜μ€€μ΄λ‹€. λ¬Όλ‘  μ•”ν˜Έκ°€ 더 λ³΅μž‘ν•˜κ±°λ‚˜ 길이가 더 κΈΈμ–΄μ§€λ©΄ 수백~수천 년은 기본으둜 κΈ°λ‹€λ €μ•Ό ν•œλ‹€.

REFERENCE : https://namu.wiki/w/%EB%B8%8C%EB%A3%A8%ED%8A%B8%20%ED%8F%AC%EC%8A%A4#toc

 

Digest(λ‹€μ΄μ œμŠ€νŠΈ)λž€? 해싱을 톡해 얻은 μ•”ν˜Έν™”λœ 데이터λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ, λ™μΌν•œ λ‹€μ΄μ œμŠ€νŠΈ..

같은 λ¬Έμžμ—΄μ„ 해싱을 ν•˜λ©΄ λ™μΌν•œ λ‹€μ΄μ œμŠ€νŠΈκ°€ λ‚˜μ˜€κ²Œ λ©λ‹ˆλ‹€.
κ·Έλ ‡κΈ° λ•Œλ¬Έμ— κ·Έλ™μ•ˆ ꡬ해놓은 λ‹€μ΄μ œμŠ€νŠΈλ₯Ό μ €μž₯ν•΄λ‘” λ ˆμΈλ³΄μš° ν…Œμ΄λΈ”μ΄λΌλŠ” 곳이 μžˆμŠ΅λ‹ˆλ‹€.
해컀듀은 이 곳을 μ°Έμ‘°ν•˜μ—¬ 곡격을 μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ–΄λ–»κ²Œ ν•˜λ©΄ 해컀듀이 ν•΄λ…ν•˜κΈ° νž˜λ“€κ²Œ ν•  수 μžˆμ„κΉŒμš”?

 

두 κ°€μ§€ 방법이 μžˆμŠ΅λ‹ˆλ‹€.

  • 해싱을 μ—¬λŸ¬λ²ˆ λ°˜λ³΅ν•˜λŠ” 방법
  • SaltλΌλŠ” μž„μ˜μ˜ 값을 λΆ™μ—¬μ„œ ν•΄μ‹±ν•˜λŠ” 방법

(λ¬Όλ‘  λ‘˜ λ‹€ μ‚¬μš©ν•˜λ©΄ 더 μ’‹μŠ΅λ‹ˆλ‹€.)

 

Saltλž€?

Salt? μ†ŒκΈˆ? μ‚¬μš©μžμ˜ μ•”ν˜Έλ₯Ό κ·ΈλŒ€λ‘œ ν•΄μ‹œλ₯Ό ν•œλ‹€λ©΄ 브루트 포슀 곡격을 ν†΅ν•΄μ„œ νŒ¨μŠ€μ›Œλ“œκ°€ μ‰½κ²Œ λ…ΈμΆœλ  κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

μ†ŒκΈˆμ„ μΉœλ‹€λΌλŠ” 뜻으둜, μž„μ˜μ˜ 문자λ₯Ό νŒ¨μŠ€μ›Œλ“œ 뒀에 λΆ™μ—¬μ„œ 해싱을 ν•˜λ©΄ μ•”ν˜Έν™”λœ λ¬Έμžμ—΄μ„ λ³΅ν˜Έν™”ν•˜λŠ”λ° μ„±κ³΅ν•œλ‹€ν•΄λ„ Salt값이 μ„žμ—¬μžˆκΈ° λ•Œλ¬Έμ— 기쑴의 νŒ¨μŠ€μ›Œλ“œλ₯Ό μ°ΎκΈ° μ–΄λ €μšΈ κ²ƒμž…λ‹ˆλ‹€.

 

SaltλŠ” 해싱을 ν•˜κΈ°μ „μ— 원문에 μž„μ˜μ˜ λ¬Έμžμ—΄μ„ λΆ™μ΄λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

 

Salt + μ—¬λŸ¬λ²ˆ ν•΄μ‹±ν•˜κΈ°

해싱을 λͺ‡λ²ˆμ„ λ°˜λ³΅ν–ˆλŠ”μ§€λ„ 해컀듀이 ν•΄λ…ν•˜λŠ”λ° 쑰금의 μ‹œκ°„μ„ μ§€μ—°μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

νŒ¨μŠ€μ›Œλ“œμ— Saltλ₯Ό λΆ™μ—¬ 해싱을 Nλ²ˆμ„ λ°˜λ³΅ν•˜λ©΄ λ”μš± 더 μ•Œμ•„λ‚΄κΈ° μ–΄λ €μš΄ λ‹€μ΄μ œμŠ€νŠΈλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

해싱을 μ—¬λŸ¬λ²ˆ ν•˜λŠ” 것을 Key Stretching(ν‚€ 슀트레칭)이라고 ν•©λ‹ˆλ‹€.

 

 

REFERENCES

  • Clap Yeonλ‹˜μ˜ Medium
  • st-labλ‹˜μ˜ blog
  • dev_eunλ‹˜μ˜ blog

κ°μ‚¬ν•©λ‹ˆλ‹€.

λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
  1. ν•΄μ‹œλ₯Ό ν†΅ν•œ μ•”ν˜Έν™”
  2. ν•˜μ§€λ§Œ, λ™μΌν•œ λ‹€μ΄μ œμŠ€νŠΈ..
  3. Saltλž€?
  4. Salt + μ—¬λŸ¬λ²ˆ ν•΄μ‹±ν•˜κΈ°
  5. REFERENCES
'🌻 JAVA/정리정리정리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • Jackson ObjectMapper 비직렬화 κ³Όμ •
  • [JAVA] System.getProperties둜 ν”„λ‘œνΌν‹° κ°’ λ°›κΈ°
  • [JAVA] properties κ°’ μ½μ–΄μ˜€κΈ°
  • intellijμ—μ„œ Java ν”„λ‘œμ νŠΈ jar 파일 μƒμ„±ν•˜κΈ°
iseunghan
iseunghan
κΎΈμ€€ν•˜κ²Œ μ—΄μ‹¬νžˆ..
iseunghanκΎΈμ€€ν•˜κ²Œ μ—΄μ‹¬νžˆ..
iseunghan
iseunghan

곡지사항

  • μ–΄μ œλ³΄λ‹€ λ‚˜μ€ 였늘이 되기 μœ„ν•΄ πŸ”₯
  • λΆ„λ₯˜ 전체보기 (261)
    • πŸ’ Spring (14)
      • κ°œλ… 및 이해 (2)
      • Spring 핡심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB μ ‘κ·Ό 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • μžλ°” ORM ν‘œμ€€ JPA ν”„λ‘œκ·Έλž˜λ° (20)
      • μ•Œκ³ λ¦¬μ¦˜, 자료ꡬ쑰 (13)
      • λ””μžμΈ νŒ¨ν„΄ (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • πŸ”– Snippets (3)
      • Javascript (3)
    • βš™οΈ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • πŸ“¬ Kafka (1)
    • πŸ’¬ ETC.. (4)
      • πŸ’» macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (2)
    • πŸ“š Databases (15)
      • 였라클둜 λ°°μš°λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 개둠과 μ‹€μŠ΅(2판) (3)
      • RealMySQL 8.0 (8)
    • πŸ”₯ Computer Science (5)
      • πŸ“‘ λ„€νŠΈμ›Œν¬ (5)
    • 🏷️ ν˜‘μ—… (1)
    • πŸ“œ μ½”λ”©ν…ŒμŠ€νŠΈ (38)
      • BAEKJOON\μˆ˜ν•™ 1, μˆ˜ν•™ 2 (8)
      • BAEKJOON\μž¬κ·€ (5)
      • BAEKJOON\브루트 포슀 (3)
      • BAEKJOON\μ •λ ¬ (1)
      • BAEKJOON\λ°±νŠΈλž˜ν‚Ή (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이뢄탐색 (1)
      • BAEKJOON\λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° (9)
      • BAEKJOON\그리디 μ•Œκ³ λ¦¬μ¦˜ (0)
    • ✨ ISEUNGHAN (1)

인기 κΈ€

졜근 κΈ€

전체
였늘
μ–΄μ œ
λ°˜μ‘ν˜•
hELLO Β· Designed By μ •μƒμš°.
iseunghan
ν•΄μ‹œ(Hash)?μ†”νŠΈ(Salt)? νŒ¨μŠ€μ›Œλ“œ μ•”ν˜Έν™” λŒ€ν•΄μ„œ
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

κ°œμΈμ •λ³΄

  • ν‹°μŠ€ν† λ¦¬ ν™ˆ
  • 포럼
  • 둜그인

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.