λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/λ³΄μ•ˆ

μ „μžμ„œλͺ…κ³Ό λ™μž‘ 원리

by πŸŒ»β™š 2021. 10. 6.

μ „μžμ„œλͺ…

μ „μžμ„œλͺ…은 ν”„λ‘œκ·Έλž¨, λ“œλΌμ΄λ²„, μ„œλΉ„μŠ€ λ“± μ—¬λŸ¬ 맀체듀이 μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것을 μΈμ¦ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ„œλͺ…이닀. μ•ˆμ „ν•œ νŒŒμΌμ΄λ‚˜ λ“œλΌμ΄λ²„μž„μ„ μΈμ¦ν•˜κΈ° μœ„ν•΄ Code-Signingκ³Ό 같은 μž‘μ—…λ„ μ „μžμ„œλͺ…이고… μ›Ήμ‚¬μ΄νŠΈκ°€ μ•ˆμ „ν•˜λ‹€λŠ” 것을 인증 λ°›κΈ° μœ„ν•΄ SSL을 μ μš©ν•˜λŠ” 것도 μ „μžμ„œλͺ…이고 μΈμ¦μ„œμ— Timestampingν•˜λŠ” 것도 μ „μžμ„œλͺ…이닀. 즉, μ•ˆμ „ν•˜λ‹€λŠ” 것을 μΈμ¦ν•˜κΈ° μœ„ν•œ ν–‰μœ„κ°€ μ „μžμ„œλͺ…μ˜ 포괄적인 μ˜λ―Έμ΄λ‹€.

μœ„μ˜ μ΄λ―Έμ§€λŠ” 크둬 λΈŒλΌμš°μ €μ—μ„œ SSL을 μ μš©ν•œ μΈμ¦μ„œμ— λŒ€ν•œ ν™•μΈν•˜λŠ” 방법이닀. httpsκ°€ μ μš©λ˜μ–΄ μžλ¬Όμ‡  μ•„μ΄μ½˜μ΄ 있으면 SSL이 적용된 μ‚¬μ΄νŠΈλΌλŠ” ν‘œμ‹œμ΄λ‹€.

μΈμ¦μ„œλ₯Ό 확인해보면 μΈμ¦μ„œ 3κ°œκ°€ μ—°κ²°λ˜μ–΄ μžˆλŠ”κ²ƒμ„ 확인할 수 μžˆλ‹€. μ΄λŠ” μΈμ¦μ„œ 체인이라고 ν•˜λŠ”λ° κ°€μž₯ 상단에 μžˆλŠ” Root CA둜 λΆ€ν„° 인증(μ„œλͺ…) 받은 쀑간 인증기관이 있고 이 쀑간 μΈμ¦κΈ°κ΄€μœΌλ‘œλΆ€ν„° 인증(μ„œλͺ…) 받은 μ΅œμ’…μ μœΌλ‘œ μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ” μΈμ¦μ„œλ₯Ό 확인할 수 μžˆλ‹€. μ΄λŸ°μ‹μœΌλ‘œ μΈμ¦μ„œκ°„μ˜ 인증절차λ₯Ό μœ„ν•΄ μƒμœ„ CAκ°€ μ „μžμ„œλͺ…을 ν•΄μ£ΌλŠ” 것을 λΈŒλΌμš°μ €λ₯Ό ν†΅ν•΄μ„œλ„ 확인할 수 μžˆλ‹€.

μ „μžμ„œλͺ… κΈ°λŠ₯

μ „μžμ„œλͺ…은 μ•„λž˜μ˜ κΈ°λŠ₯을 κ°–λŠ”λ‹€.

  • μ„œλͺ…μžμ˜ 신뢄을 증λͺ…
  • μ„œλͺ…μžκ°€ μ„œλͺ…ν–ˆλ‹€λŠ” 사싀에 λŒ€ν•œ 뢀인봉쇄
  • μ„œλͺ…ν•œ 데이터에 λŒ€ν•œ λ³€μ‘°λ˜μ§€ μ•Šμ•˜μŒμ„ 증λͺ…

μ „μžμ„œλͺ…μ˜ λ™μž‘ 원리

μ΄λ²ˆμ—λŠ” μΈμ¦μ„œκ°„μ˜ μ„œλͺ…이 μ•„λ‹Œ 인증받은 μΈμ¦μ„œλ₯Ό ν™œμš©ν•΄μ„œ μ „μžμ„œλͺ…μ˜ 전체적인 흐름을 μ•„λž˜μ˜ μ˜ˆμ‹œμ—μ„œ ν‘œν˜„ν•˜κ³  μžˆλ‹€. μ„ΈλΆ€μ μœΌλ‘œ λ“€μ–΄κ°€λ©΄ 더 λ§Žμ€ 단계듀이 μžˆκ² μ§€λ§Œ... Code-Sign(ex. νŒŒμΌμ— μ „μžμ„œλͺ…) μž‘μ—…μ˜ 큰 그림이닀.

μ•„λž˜μ˜ μ˜ˆμ‹œλŠ” 제 3μžκ°€ MνšŒμ‚¬μ—μ„œ κ°œλ°œν•œ ν”„λ‘œκ·Έλž¨μ„ λ‹€μš΄λ‘œλ“œ λ°›μ•˜μ„ λ•Œ.. ν”„λ‘œκ·Έλž¨μ΄ 정말 M이 κ°œλ°œν–ˆλŠ”μ§€ ν™•μΈν•˜λŠ” 절차λ₯Ό μ „μžμ„œλͺ…을 톡해 μž…μ¦μ΄ κ°€λŠ₯ν•˜λ‹€.

  1. νšŒμ‚¬M은 ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•œλ‹€.
  2. μ „μžμ„œλͺ…ν•˜λŠ” κ³Όμ •μ—μ„œ 파일의 ν•΄μ‹œκ°’μ„ κ΅¬ν•œλ‹€.
    1. νŒŒμΌμ— λŒ€ν•œ 변경사항을 μΆ”μ ν•˜κΈ° μœ„ν•΄ Hash값을 κ΅¬ν•œλ‹€.
    2. λŒ€μš©λŸ‰μ˜ 파일인 경우 전체λ₯Ό λΉ„κ΅ν•˜λŠ”λ° λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ˜μ–΄ Hash값을 μ΄μš©ν•˜λ©΄ μ‹œκ°„μ  νš¨μœ¨μ„ 높일 수 μžˆλ‹€.
  3. M의 κ°œμΈν‚€λ₯Ό μ΄μš©ν•΄μ„œ Hash값을 μ•”ν˜Έν™”ν•œλ‹€.
    1. μ΄κ³Όμ •μ—μ„œ κ°œμΈν‚€λ₯Ό μ΄μš©ν•œλ‹€κ³  ν–ˆλŠ”λ°… κ°œμΈν‚€λ₯Ό μ΄μš©ν•œλ‹€κΈ° 보닀 μ„œλͺ…μš© μΈμ¦μ„œλ₯Ό μ΄μš©ν•΄μ„œ λ‚΄λΆ€μ μœΌλ‘œ μ—°λŒ€μ„œλͺ…κ³Ό 같은 과정을 κ±°μΉœλ‹€.
  4. νŒŒμΌμ— μ „μžμ„œλͺ…ν•œ λ‚΄μš©μ€ μ²¨λΆ€ν•˜μ—¬ 인증된 νŒŒμΌμ΄λΌλŠ” 것을 μž…μ¦ν•œλ‹€.
  5. μΈν„°λ„·μœΌλ‘œ νŒŒμΌμ„ λ°°ν¬ν•œλ‹€.
  6. μ‚¬μš©μžκ°€ 파일 λ‹€μš΄λ‘œλ“œλ₯Ό μ‹œλ„ν•œλ‹€.
  7. νŒŒμΌμ—μ„œ μ „μžμ„œλͺ…μ˜ 뢀뢄을 M의 κ³΅κ°œν‚€λ‘œ λ³΅ν˜Έν™”ν•΄μ„œ μ•”ν˜Έν™”ν–ˆλ˜ Hash값을 μ–»λŠ”λ‹€.
    1. μ—¬κΈ°μ„œ μ „μžμ„œλͺ…은 M의 κ°œμΈν‚€λ‘œ μ•”ν˜Έν™”ν•œ Hashκ°’μœΌλ‘œ M의 κ³΅κ°œν‚€λ‘œ λ³΅ν˜Έν™”κ°€ μ„±κ³΅ν•˜λ©΄ μ΄λŠ” M이 κ°œλ°œν•œ ν”„λ‘œκ·Έλž¨μž„μ„ μž…μ¦ν•œλ‹€.
  8. νŒŒμΌμ„ 이전에 μ•”ν˜Έν™”ν• λ•Œ μ‚¬μš©ν•œ λ˜‘κ°™μ€ Hash μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ Hash값을 μ–»λŠ”λ‹€.
  9. λ³΅ν˜Έν™”ν•΄μ„œ 얻은 Hashκ°’κ³Ό νŒŒμΌμ„ ν•΄μ‹±ν•΄μ„œ 얻은 Hash값을 λΉ„κ΅ν•˜μ—¬ λ™μΌν•œμ§€ λΉ„κ΅ν•œλ‹€.
    1. λ™μΌν•˜λ‹€λ©΄ 개발 -> 배포 -> λ‹€μš΄λ‘œλ“œ κΉŒμ§€ μ•„λ¬΄λŸ° 변경이 μ—†μ—ˆλ‹€λŠ” 것을 증λͺ…ν•œλ‹€.

λŒ“κΈ€