๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

OTP์˜ ๋™์ž‘ ์›๋ฆฌ, HOTP์™€ TOTP ์ดํ•ดํ•˜๊ธฐ ๋ณธ๋ฌธ

Study/๋ณด์•ˆ

OTP์˜ ๋™์ž‘ ์›๋ฆฌ, HOTP์™€ TOTP ์ดํ•ดํ•˜๊ธฐ

Shinjio 2023. 12. 13. 22:16

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜์€ ๊ธˆ์œต ๊ฑฐ๋ž˜์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๊ทธ๋ฆฌ๊ณ  ์ตœ๊ทผ์—๋Š” ๋กœ๊ทธ์ธ 2์ฐจ ์ธ์ฆ์œผ๋กœ๋„ ์ž์ฃผ ์“ฐ์ด๋Š” OTP์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. OTP๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ณ , OTP์˜ ์ข…๋ฅ˜์ธ HOTP์™€ TOTP๊ฐ€ ์–ด๋– ํ•œ ์›๋ฆฌ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 


 

์ถœ์ฒ˜ : ๋‚˜๋ฌด์œ„ํ‚ค

 

OTP(One Time Password) ์ •์˜

  • OTP๋ž€ One-Time password๋กœ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. 
  • OTP๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๋ณด์•ˆ์„ฑ์ด ๋†’๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

 

OTP ๋™๊ธฐํ™” ๋ฐฉ์‹

 

 

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ(๋˜๋Š” ํ† ํฐ) ์‚ฌ์ด์— ๋ฏธ๋ฆฌ ์•ฝ์†๋œ ๊ทœ์น™์— ์˜ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ์ƒ์„ฑํ•œ ์ผํšŒ์šฉ ์•”ํ˜ธ๋ฅผ ์„œ๋ฒ„ ์ธก์— ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„ ์ธก๋„ ๊ฐ™์€ ๊ทœ์น™์— ์˜ํ•ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋น„๋ฐ€๊ฐ’์„ ๊ฐ€์ ธ์˜จ ํ›„, ์ผํšŒ์šฉ ์•”ํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋กœ ๋น„๊ตํ•˜๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.

 

OTP์˜ ๋™์ž‘์›๋ฆฌ

 

 

 

  1. ๋น„๋ฐ€ํ‚ค ์ƒ์„ฑ(Secret Key Generation)
    1. ์‚ฌ์šฉ์ž์™€ ์‹œ์Šคํ…œ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ๋น„๋ฐ€ํ‚ค(secret key) ์ƒ์„ฑ
      1. ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋˜๋ฉฐ ํ•ด๋‹น ๋น„๋ฐ€ํ‚ค์™€ ๋‹ค๋ฅธ ์ •๋ณด(ex. ์นด์šดํŠธ ๋“ฑ)๋ฅผ ํ† ๋Œ€๋กœ ์ผํšŒ์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ƒ์„ฑ๋จ
  2. ์‹œ๊ฐ„ ์ •๋ณด ์‚ฌ์šฉ(Time-Based OTP - TOTP) ๋˜๋Š” ์นด์šดํ„ฐ ์‚ฌ์šฉ(HMAC-Based OTP - HOTP)
    1. TOTP(Time-Based OTP) : ํŠน์ • ์‹œ๊ฐ„(์˜ˆ: 30์ดˆ)๋งˆ๋‹ค ์ƒˆ๋กœ์šด OTP ์ƒ์„ฑ, ์‹œ๊ฐ„ ์ •๋ณด์™€ ๋น„๋ฐ€ํ‚ค๋ฅผ ์กฐํ•ฉํ•˜์—ฌ OTP๋ฅผ ๊ณ„์‚ฐํ•จ
    2. HOTP(HMAC-Based OTP) : ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ๋˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด OTP๋ฅผ ์ƒ์„ฑํ•จ. ์ผ์ •ํ•œ ์นด์šดํ„ฐ์™€ ๋น„๋ฐ€ํ‚ค๋ฅผ ์กฐํ•ฉํ•˜์—ฌ OTP๋ฅผ ๊ณ„์‚ฐ
  3. OTP ์ƒ์„ฑ(OTP Generation)
    1. TOTP : ํ˜„์žฌ ์‹œ๊ฐ„ ๋˜๋Š” ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€ํ‚ค์™€ ์กฐํ•ฉํ•˜์—ฌ ์ผํšŒ์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑ
    2. HOTP : ์นด์šดํ„ฐ์™€ ๋น„๋ฐ€ํ‚ค๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ผํšŒ์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑ
  4. OTP ์ „๋‹ฌ(OTP Delivery)
    1. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒ์„ฑ๋œ OTP๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌ
    2. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋ฐ”์ผ ์•ฑ(์˜ˆ: Google Authenticator)๋ฅผ ํ†ตํ•ด QR ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ฑฐ๋‚˜, ํ…์ŠคํŠธ ํ˜•์‹์˜ OTP๋ฅผ ์ž…๋ ฅํ•˜๋„๋ก ์œ ๋„ํ•จ
  5. OTP ๊ฒ€์ฆ(OTP Verification)
    1. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ OTP์™€ ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑํ•œ OTP๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ
  6. ์ธ์ฆ ๊ฒฐ๊ณผ(Authentication Result)
    1. OTP๊ฐ€ ์ผ์น˜ํ•˜๋ฉด, ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•จ
    2. OTP๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด, ์ธ์ฆ์ด ์‹คํŒจํ•˜๊ณ  ์ ‘๊ทผ์„ ๊ฑฐ๋ถ€ํ•จ

 


 

์ง€๊ธˆ๊นŒ์ง€๋Š” OTP์˜ ๊ฐ„๋‹จํ•œ ์ •์˜์™€ ๋™์ž‘์›๋ฆฌ๋ฅผ ์ด์•ผ๊ธฐํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ OTP๋Š” HOTP์™€ TOTP ๋‘๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ ์›๋ฆฌ๋Š” ์œ ์‚ฌํ•˜์ง€๋งŒ ์ฐจ์ด์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ์ƒ์„ธํ•˜๊ฒŒ ํ•ด๋‹น OTP์˜ ์›๋ฆฌ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

TOTP์™€ HOTP

๋ณธ๋ก ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜์ž๋ฉด HOTP๋Š” HMAC ๊ธฐ๋ฐ˜์˜ OTP์ด๋ฉฐ, TOTP๋Š” HOTP์—์„œ Counter ๊ฐ’ ๋Œ€์‹  TimeStamp๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

1. HOTP

HMAC ๊ธฐ๋ฐ˜์˜ OTP๋กœ ์ดˆ๊ธฐ OTP ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. 

HMAC = Hash based MAC(Message Authentication Code)์œผ๋กœ ํ•ด์‹œ ๊ธฐ๋ฐ˜์˜ ๋ฉ”์‹œ์ง€ ์ธ์ฆ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. 

2๋ฒˆ์˜ Hash ํ•จ์ˆ˜์™€ 1๊ฐœ์˜ ๋น„๋ฐ€ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ Hash ํ•จ์ˆ˜๋กœ๋Š” MD5, SHA-1, SHA-256, SHA-512 ๋“ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

HOTP์— ์‚ฌ์šฉ๋˜๋Š” HMAC ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. 

 

HMAC

  • ์ธ์ฆํ•  ๋ฐ์ดํ„ฐ์™€ ๊ณต์œ  ๋น„๋ฐ€ํ‚ค์— ๋Œ€ํ•ด ์•”ํ˜ธํ™” ํ•ด์‹œ ํ•จ์ˆ˜(์˜ˆ. SHA1, SHA256)๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์–ป์€ ๋ฉ”์‹œ์ง€ ์ธ์ฆ์ฝ”๋“œ

HMAC(K, text) = H(K xor Opad + H(K xor Ipad + message))

  • K๋Š” Secret Key ์ œ 3์ž๊ฐ€ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๋น„๋ฐ€ ํ…์ŠคํŠธ
  • H๋Š” ํ•ด์‹œํ•จ์ˆ˜ MD5 Sha-256 ๋“ฑ ๋‹ค์–‘ํ•œ ํ•ด์‹œ ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • Opad๋Š” Output padding K์˜ ๊ธธ์ด ๋งŒํผ 0x5C ๋ฅผ ๋ฐ˜๋ณต
  • Ipad๋Š” Output padding K์˜ ๊ธธ์ด ๋งŒํผ 0x36 ๋ฅผ ๋ฐ˜๋ณต

 

  • H - ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜ (MD5, SHA-1, SHA-224, SHA-256, SHA-512 ๋“ฑ ์‚ฌ์šฉ)
  • m - ์ธ์ฆ์ด ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€ (HOTP์—์„œ๋Š” ์นด์šดํ„ฐ, TOTP์—์„œ๋Š” ์‹œ๊ฐ„)
  • K - ๋น„๋ฐ€ํ‚ค
  • || - ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ
    • ๋น„ํŠธ XOR ์—ฐ์‚ฐ
  • opad - ๋ธ”๋Ÿญ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง„ ์™ธ๋ถ€ ํŒจ๋”ฉ (0x5c ๊ฐ’์œผ๋กœ ์ฑ„์›€)
  • ipad - ๋ธ”๋Ÿญ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง„ ๋‚ด๋ถ€ ํŒจ๋”ฉ (0x36 ๊ฐ’์œผ๋กœ ์ฑ„์›€)
    • 0x5c = 01011100(2) ⇒ ํ‚ค์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์–ด์„œ ์‚ฌ์šฉ
    • 0x36 = 00110110(2) ⇒ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์‚ฌ์šฉ
    • ipad์™€ opad์— ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ‚ค๋ฅผ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋ณ€ํ˜• → ํ•ด์‹œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ , ๋‘ ํŒจ๋”ฉ ๊ฐ’์ด ๋…๋ฆฝ์ ์œผ๋กœ ์„ ํƒ๋˜์–ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€ํ˜•์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์ด๋Œ์–ด๋ƒ„
    • ๋‘ ๊ฐœ์˜ ๊ฐ’๋“ค์ด XOR ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํ‚ค๋ฅผ ๋ณ€ํ˜•ํ•  ๋•Œ ํšจ๊ณผ์ ์ธ ๋น„ํŠธ ํŒจํ„ด์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ(ํŽธ์˜์ƒ ์„ ํƒ๋œ ๊ฐ’). ์ฆ‰, ํ‚ค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ณ€ํ˜•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ์ค‘ ๋ถ„์„๊ณผ ๊ฒ€์ฆ์„ ํ†ตํ•ด ์„ ํƒ๋œ ๊ฐ’.
      • ์œ„ ๋‘๊ฐœ์˜ ๊ฐ’์ด 1๊ณผ 0์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํŒจํ„ด์„ ์ƒ์„ฑํ•จ. ์ด๋Ÿฌํ•œ ํŒจํ„ด์€ ํ‚ค์˜ ๊ฐ ๋น„ํŠธ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋ณ€ํ˜•์‹œํ‚ฌ ๋•Œ ํšจ๊ณผ์ ์ด๋ฉฐ, ์ด๋Š” ํ•ด์‹œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์˜ˆ์ธก์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด์•ˆ์„ฑ์„ ๋†’์ž„

HOTP๋Š” ์œ„์˜ HMAC ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ message ๋Œ€์‹  Counter๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ HMAC์„ ์ƒ์„ฑํ•œ ๋’ค Truncateํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ ์ผ์ • ์ž๋ฆฌ์ˆ˜์˜ ์ˆซ์ž ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

** Truncate : ๋™์ ์œผ๋กœ string์„ ์ž๋ฅด๋Š” ์ž‘์—…

 

HOTP(K, counter) = Truncate(HMAC-SHA-1(K, counter))

 

Truncate

1. SHA-1 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•œ HMAC(K, Counter)๋กœ ์ƒ์„ฑ๋œ Hash๋Š” 20byte์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง

    • Hash ๊ฒฐ๊ณผ ๊ฐ’์€ 16์ง„์ˆ˜ ⇒ 1๊ฐœ์˜ 16์ง„์ˆ˜๋Š” 4bit, 2๊ฐœ์˜ 16์ง„์ˆ˜๊ฐ€ 16byte
    • ๋งˆ์ง€๋ง‰ 4bit์˜ ์ˆ˜๋กœ ๊ทธ๋ฃน์˜ offset ํ™•์ธ ⇒ a (10)
    • ํ•ด๋‹น offset + ๋‹ค์Œ 3๊ฐœ์˜ ๊ทธ๋ฃน๊นŒ์ง€์˜ 16์ง„์ˆ˜ ์ถ”์ถœ (์ด 4๊ทธ๋ฃน) ⇒ DBC(Dinamic Binary Code)
      • ํ•ด๋‹น ๊ฐ’์ด OTP ์ˆซ์ž๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์“ฐ์ผ ์˜ˆ์ •

 

2. DBC์˜ ์ฒซ Byte๋Š” 0x7f์™€ AND ์—ฐ์‚ฐ ์ˆ˜ํ–‰(MASK ์—ฐ์‚ฐ)

  • 0x7f & 0x58 ⇒ 0111 1111 & 0101 1000 ⇒ 0101 1000
  • 0x7f ⇒ ์ตœ์ƒ์œ„ ๋น„ํŠธ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋น„ํŠธ๊ฐ€ 1
    • 0 & 0 ⇒ 0, 0 & 1 ⇒ 0 ์ด๋ฏ€๋กœ ์–ด๋–ค ์ˆ˜์™€ ์—ฐ์‚ฐ์„ ํ•˜๋˜์ง€ 0์ด๋จ ⇒ ํ•ญ์ƒ ์–‘์ˆ˜๋ฅผ ๋œปํ•จ
    • ๋‚˜๋จธ์ง€๋Š” 1 ⇒ 1 & 0 ⇒ 0, 1 & 1 ⇒ 1์ด๋ฏ€๋กœ ์–ด๋–ค ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋”๋ผ๋„ ์›๋ž˜์˜ ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ
    • DBC ๊ฒฐ๊ณผ : 0x58838990 ⇒ 10์ง„์ˆ˜๋กœ ์น˜ํ™˜ํ•˜๋ฉด 1485015440(10์ž๋ฆฌ์ˆ˜)
    • 10์ง„์ˆ˜๋กœ ์น˜ํ™˜๋œ DBC ๊ฐ’์„ 10์˜ 6์Šน์œผ๋กœ Mod ์—ฐ์‚ฐ
    • ⇒ ๊ฒฐ๊ณผ : 15440 ⇒ 6์ž๋ฆฌ๊ฐ€ ์•ˆ๋  ๊ฒฝ์šฐ ๋งจ ์•ž์— 0์„ ์ถ”๊ฐ€ 
    • HOTP : 015440

 

์ž‘๋™์ˆœ์„œ

  1. ์‚ฌ์šฉ์ž๊ฐ€ OTP ๋‹จ๋ง์˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค
  2. Counter + 1
  3. Counter์™€ Secret Key ⇒ HMAC(K, Counter) ⇒ Truncate(HMAC(K, Counter)) ⇒ OTP ๋ฒˆํ˜ธ ์ƒ์„ฑ
  4. ์‚ฌ์šฉ์ž๋Š” ์„œ๋ฒ„๋กœ OTP ๋ฒˆํ˜ธ๋ฅผ ์ „์†กํ•œ๋‹ค.
  5. ์„œ๋ฒ„๋Š” ๊ธฐ์กด ๋ณด์œ ํ•œ Counter, Secret key๋ฅผ ํ†ตํ•ด 3๋ฒˆ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ OTP ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  6. 5์—์„œ ์ƒ์„ฑํ•œ OTP ๋ฒˆํ˜ธํ™” ์‚ฌ์šฉ์ž๊ฐ€ ์ „์†กํ•œ OTP ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์œผ๋ฉด ์ธ์ฆ ์™„๋ฃŒ
  7. ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ์„œ๋ฒ„์˜ Counter + 1

 

2. TOTP

  • TOTP๋Š” HOTP์—์„œ Counter ๊ฐ’์„ ์‹œ๊ฐ„(Time Stamp)๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ
  • ๊ธฐ์กด์— HMAC์ด ์—ฐ์‚ฐ๊ฐ’์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ค๋˜ HMAC-SHA-1 ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•œ HMAC-SHA-256์ด๋‚˜ HMAC-SHA-512 ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ
  • ํŠน์ • ์‹œ๊ฐ„(๋ณดํ†ต 30์ดˆ ํ˜น์€ 60์ดˆ)๋งˆ๋‹ค ๊ทธ ๋‹ค์Œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋จ
  • ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์‹œ๊ฐ„ ์ฐจ์ด ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์ธ์ฆ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ ⇒ ๋™๊ธฐํ™” ๋ฐฉ๋ฒ• ํ•„์š”

 

TOTP = HOTP(K, T)

 

 

  • UT(UnixTime, UTC of January 1, 1970 ์ดํ›„ ๊ฒฝ๊ณผ๋œ ํ˜„์žฌ์‹œ๊ฐ„(๋‹จ์œ„: ์ดˆ))
  • UT๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋กœ ๋™๊ธฐํ™”๋จ

 

3. HOTP vs TOTP

ํ•„์š”ํ•ญ๋ชฉ Shared Secret Key, Counter Shared Secret key, Time Stamp
HMAC ๋ฉ”์‹œ์ง€ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” Counter ์‹œ๊ฐ„์— ์˜์กดํ•˜์—ฌ ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” Counter
์œ ํšจ์‹œ๊ฐ„ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅ 30์ดˆ, 60์ดˆ ๋“ฑ
RFCs IETF RFC 4226 RFC 6238

 

 

 


 

๊ฐ„๋‹จํ•˜๊ฒŒ OTP์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด Java์™€ React๋กœ ๊ตฌํ˜„ํ•œ TOTP์— ๋Œ€ํ•œ ๋‚ด์šฉ๋„ ์ž‘์„ฑํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

์ฐธ๊ณ ๋ฌธํ—Œ

https://velog.io/@dldldl1022/OTP%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC

 

OTP์˜ ๋™์ž‘ ์›๋ฆฌ

OTP ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๊ธฐ๐Ÿค”

velog.io

https://www.howdy-mj.me/general/otp

 

OTP ๋™์ž‘์›๋ฆฌ

ํ•„์ž๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์จ๋‚ด๋ ค๊ฐ€๋Š” ๊ธ€๋กœ, ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด๋‚˜ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์Šค๋งˆํŠธํฐ์ด ๋‚˜์˜ค๊ธฐ ์ „, ์–ด๋Š ์‚ฌ์ดํŠธ์— ๊ฐ€์ž…ํ•  ๋•Œ ๋น„๋ฐ€๋ฒˆ

www.howdy-mj.me

https://ldap.or.kr/1373-2/

 

One Time Password(OTP)์˜ ๊ฐœ๋… ๋ฐ ๋™์ž‘๋ฐฉ์‹. LDAP์„ ํ™œ์šฉํ•œ OTP ์ธ์ฆ. - DSMENTORING

์•ˆ๋…•ํ•˜์„ธ์š”. ์ปจ์„คํŒ…์‚ฌ์—…๋ณธ๋ถ€ ๊น€ํ˜„์šฐ ๋Œ€๋ฆฌ๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„  OTP์— ๋Œ€ํ•œ ๊ฐœ๋… ๋ฐ ๋™์ž‘๋ฐฉ์‹, LDAP์„ ํ†ตํ•œ OTP ์ธ์ฆ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € OT

ldap.or.kr