SlideShare a Scribd company logo
Decipher MFA
Brought to you by Boshan Sun
1
What is MFA?
2
MFA
• Multi-Factor Authentication MFA
• Two-Factor Authentication 2FA
3
4
2FA 5
Tech behind
• otp
• hotp
• totp
• hmac
• sha
• base32
6
otp
• one-time password, rfc 2289, 1998
• prevent replay attack
MD5 ENCODINGS
Pass Phrase Seed Cnt Hex Six Word Format
====================================================================================
This is a test. TeSt 0 9E87 6134 D904 99DD INCH SEA ANNE LONG AHEM TOUR
This is a test. TeSt 1 7965 E054 36F5 029F EASE OIL FUM CURE AWRY AVIS
This is a test. TeSt 99 50FE 1962 C496 5880 BAIL TUFT BITS GANG CHEF THY
AbCdEfGhIjK alpha1 0 8706 6DD9 644B F206 FULL PEW DOWN ONCE MORT ARC
AbCdEfGhIjK alpha1 1 7CD3 4C10 40AD D14B FACT HOOF AT FIST SITE KENT
AbCdEfGhIjK alpha1 99 5AA3 7A81 F212 146C BODE HOP JAKE STOW JUT RAP
OTP's are good correct 0 F205 7539 43DE 4CF9 ULAN NEW ARMY FUSE SUIT EYED
OTP's are good correct 1 DDCD AC95 6F23 4937 SKIM CULT LOB SLAM POE HOWL
OTP's are good correct 99 B203 E28F A525 BE47 LONG IVY JULY AJAR BOND LEE
7
hotp
• hmac-based one-time password, rfc 4226, 2005
8
hmac
• hash-based message authentication code
9
Why do we need hash function?
10
hash function
• md5(1992)
• sha(1995)
• sha256/sha512(2001)
• sha3(2015)
an example
show me the money
alice ------------------------------------------------------------------> bob
show me the money
alice ------------------------------------------------------------------> bob
3f3a323ba2bc
a problem
show me the money show me the honey
alice ----------------------------> eve ----------------------------> bob
3f3a323ba2bc 37954357d876
11
a potential solution
show me the money
rA9
sha
rA9show me the money -------> f023a7d109f1
sha
rA9f023a7d109f1 -------> b15c701d5e63
show me the money
alice ------------------------------------------------------------------> bob
rA9 b15c701d5e63 rA9
show me the money show me the honey
alice ----------------------------> eve ----------------------------> bob
rA9 b15c701d5e63 b15c701d5e63 rA9 233999963a1d
12
hmac
$ erl
1> crypto:hmac(sha,"rA9","show me the money").
<<27,10,170,232,190,54,79,113,69,29,72,245,62,229,197,166,75,195,24,82>>
13
hotp
• hmac-based one-time password, rfc 4226, 2005
hotp algorithm
rA9
hmac(sha,"rA9","0000000000000000")
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
d8 41 ef 1c 96 ac 02 0c d1 a3 32 06 15 58 ec 69 4d d2 3f 32
*
** ** ** ** 2
ef 1c 96 ac
1110 1111 0001 1100 1001 0110 1010 1100
110 1111 0001 1100 1001 0110 1010 1100
1864144556
144556
mfa.erl
hotp(Key,C) ->
<<_:156,Sz:4>> = Hmac = crypto:hmac(sha,Key,<<C:64>>),
<<_:Sz/binary,_:1,N:31,_/binary>> = Hmac,
N rem 1000000.
14
totp
• time-based one-time password, rfc 6238, 2011
totp algorithm
unix epoch time
1970-01-01 00:00:00 0
2018-10-23 17:00:00 1540314000
2038-01-19 03:14:07 2147483647
1901-12-13 20:45:52 -2147483648
hotp("rA9",1540314000/30)
386452
mfa.erl
totp(Key) ->
T = calendar:datetime_to_gregorian_seconds(calendar:now_to_datetime(erlang:timestamp())) - 62167219200,
hotp(Key,T div 30).
15
mfa ow
an example
hellokitty/password123
user ------------------------------------------------------------------> server
key 996970 key
16
Enable mfa
key uri format
otpauth://totp/GitHub:hellokitty?secret=4fakhx6cibvwwngp&issuer=GitHub
17
base32
base32 encoding # rfc 4648
00 A 09 J 18 S 27 3
01 B 10 K 19 T 28 4
02 C 11 L 20 U 29 5
03 D 12 M 21 V 30 6
04 E 13 N 22 W 31 7
05 F 14 O 23 X
06 G 15 P 24 Y (pad) =
07 H 16 Q 25 Z
08 I 17 R 26 2
rA9
01110010 01000001 00111001
01110 01001 00000 10011 1001
01110 01001 00000 10011 10010
14 09 00 19 18
O J A T S
OJATS=== # the length of base32 encoded string is always divisible by 8
18
simple authenticator implementation
mfa.erl
totp(Key0) ->
T = calendar:datetime_to_gregorian_seconds(calendar:now_to_datetime(erlang:timestamp())) - ?epoch,
Key = decode32(string:uppercase(Key0)),
hotp(Key,T div 30).
hotp(Key,C) ->
<<_:156,Sz:4>> = Hmac = crypto:hmac(sha,Key,<<C:64>>),
<<_:Sz/binary,_:1,N:31,_/binary>> = Hmac,
N rem 1000000.
usage
$ cat ~/.mfa/config
{github,"somerandpassword"}.
{gitlab,"somecoolpassword"}.
{google,"somegoodpassword"}.
$ escript mfa.erl
github: 583309, valid in 26s
gitlab: 166210, valid in 26s
google: 704368, valid in 26s
19
Is MFA safe?
20
How to crack MFA?
21
an example
hellokitty/password123
user ------------------------------------------------------------------> server
key 996970 key
hotp(Key,T) -> 996970
22
brute force the key
$ erl
1> hack:run().
Key is <<91,101,252>>, hotp for 73 is 076127
potential key found <<12,243,176>>, hotp is 076127
potential key found <<41,163,60>>, hotp is 076127
potential key found <<54,214,149>>, hotp is 076127
potential key found <<57,134,46>>, hotp is 076127
potential key found <<57,206,238>>, hotp is 076127
potential key found <<68,189,61>>, hotp is 076127
potential key found <<70,78,253>>, hotp is 076127
potential key found <<90,172,149>>, hotp is 076127
potential key found <<91,101,252>>, hotp is 076127
potential key found <<96,226,141>>, hotp is 076127
...
*** found key <<91,101,252>> in 16s ***
23
brute force the key the Erlang way
$ erl
1> phack:run(3).
Started 12 worker processes.
Random generated key is <<154,226,246>>, hotp for 360 is 917202
potential key <<22,72,233>> found by worker <0.172.0>, hotp is 917202
potential key <<67,6,87>> found by worker <0.170.0>, hotp is 917202
potential key <<110,133,18>> found by worker <0.168.0>, hotp is 917202
potential key <<153,173,223>> found by worker <0.166.0>, hotp is 917202
potential key <<197,0,181>> found by worker <0.164.0>, hotp is 917202
potential key <<154,226,246>> found by worker <0.166.0>, hotp is 917202
key <<154,226,246>> found by worker <0.166.0> in 1s
24
$ erl
1> phack:run(4).
Started 12 worker processes.
Random generated key is <<81,10,150,35>>, hotp for 375 is 655173
potential key <<170,170,211,211>> found by worker <0.111.0>, hotp is 655173
potential key <<64,3,113,77>> found by worker <0.116.0>, hotp is 655173
potential key <<106,175,21,120>> found by worker <0.114.0>, hotp is 655173
potential key <<0,5,110,147>> found by worker <0.119.0>, hotp is 655173
potential key <<149,93,101,149>> found by worker <0.112.0>, hotp is 655173
potential key <<170,179,226,52>> found by worker <0.111.0>, hotp is 655173
potential key <<213,98,135,55>> found by worker <0.109.0>, hotp is 655173
potential key <<0,21,166,137>> found by worker <0.119.0>, hotp is 655173
potential key <<149,107,68,31>> found by worker <0.112.0>, hotp is 655173
...
key <<81,10,150,35>> found by worker <0.116.0> in 849s
25
Is MFA safe?
• https://github.com/sunboshan/mfa
analysis
key length bits crack time
1 8 ~0s
2 16 ~0s
3 24 ~16s
4 32 ~1.1h
5 40 ~11.7d
6 48 ~8.2y
7 56 ~2099y
8 64 ~537ky
9 72 ~137my
10 80 ~35kmy
26
Server implementation
• key is long enough, at least 10 bytes(github key length; aws key length is 40 bytes)
• recover mechanism
• authentication logic
27
28

More Related Content

PDF
Erlang Introduction Bcberlin3
PDF
Elixir @ Paris.rb
PPT
E-Commerce Security - Application attacks - Server Attacks
PPTX
SQL techniques for faster applications
PPT
DOCX
Server
PDF
Compilation process
PDF
2c astable monostable
Erlang Introduction Bcberlin3
Elixir @ Paris.rb
E-Commerce Security - Application attacks - Server Attacks
SQL techniques for faster applications
Server
Compilation process
2c astable monostable

What's hot (19)

KEY
実践 memcached
PDF
Reverse engineering of binary programs for custom virtual machines
PDF
The Ring programming language version 1.5.3 book - Part 69 of 184
PDF
Investigating Python Wats
PDF
The Ring programming language version 1.10 book - Part 89 of 212
DOC
Project hotel on hotel management fo
DOCX
CM_TX_Devices
PDF
The Ring programming language version 1.5.2 book - Part 74 of 181
PDF
Alexander Reelsen - Seccomp for Developers
PDF
The Ring programming language version 1.9 book - Part 69 of 210
PDF
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)
PDF
The Ring programming language version 1.3 book - Part 59 of 88
DOCX
C++ program: All tasks .cpp
PDF
The Ring programming language version 1.4 book - Part 21 of 30
PDF
Andre' Davis Transcript (2)
RTF
project3
PDF
FPBrno 2018-05-22: Benchmarking in elixir
DOCX
Laboratorio rip
実践 memcached
Reverse engineering of binary programs for custom virtual machines
The Ring programming language version 1.5.3 book - Part 69 of 184
Investigating Python Wats
The Ring programming language version 1.10 book - Part 89 of 212
Project hotel on hotel management fo
CM_TX_Devices
The Ring programming language version 1.5.2 book - Part 74 of 181
Alexander Reelsen - Seccomp for Developers
The Ring programming language version 1.9 book - Part 69 of 210
LabPal: Repeatable Computer Experiments Made Easy (ACM Workshop Talk)
The Ring programming language version 1.3 book - Part 59 of 88
C++ program: All tasks .cpp
The Ring programming language version 1.4 book - Part 21 of 30
Andre' Davis Transcript (2)
project3
FPBrno 2018-05-22: Benchmarking in elixir
Laboratorio rip
Ad

Similar to Decipher Multi-Factor Authentication - A Developers Introduction (20)

PDF
CNIT 1417. Keyed Hashing
PDF
CNIT 141: 7. Keyed Hashing
PDF
Revisiting authentication - Systems Distributed NYC, 2024
PDF
CNIT 141 7. Keyed Hashing
PDF
JAWS FESTA 中四国 2017 懇親会LT
PPT
ch11_hashing Function.ppthdhdjdjdidjebehehejeueu
PPTX
One Time Password - A two factor authentication system
PPTX
Academy PRO: Cryptography 3
PPT
Lecture 3b public key_encryption
PDF
How To Crack RSA Netrek Binary Verification System
PPT
Distribution of public keys and hmac
PDF
2012 03 The Death of Passwords
PDF
CNIT 141: 6. Hash Functions
DOC
Cryprography Assignment
PPT
PDF
CNIT 141: 6. Hash Functions
PDF
Building your own web based Authenticator
PDF
HMAC SHA 256- PROPOSED AUTHENTICATION ALGORITHM-PRINCE DUAH MENSAH-MPhil IT (...
PDF
CNIT 141 6. Hash Functions
PPT
NSC_Unit-III_final.ppt
CNIT 1417. Keyed Hashing
CNIT 141: 7. Keyed Hashing
Revisiting authentication - Systems Distributed NYC, 2024
CNIT 141 7. Keyed Hashing
JAWS FESTA 中四国 2017 懇親会LT
ch11_hashing Function.ppthdhdjdjdidjebehehejeueu
One Time Password - A two factor authentication system
Academy PRO: Cryptography 3
Lecture 3b public key_encryption
How To Crack RSA Netrek Binary Verification System
Distribution of public keys and hmac
2012 03 The Death of Passwords
CNIT 141: 6. Hash Functions
Cryprography Assignment
CNIT 141: 6. Hash Functions
Building your own web based Authenticator
HMAC SHA 256- PROPOSED AUTHENTICATION ALGORITHM-PRINCE DUAH MENSAH-MPhil IT (...
CNIT 141 6. Hash Functions
NSC_Unit-III_final.ppt
Ad

More from ArcBlock (18)

PDF
ArcBlock Introduction to Blockchain
PDF
Forge blockchain deployment made easy
PDF
Designing Decentralized Apps: Programmable Tokens
PDF
Build a Decentralized, public verifiable Database with ex_abci and Tendermint
PDF
ArcBlock Presents 5 Winning Factors to Building a Successful DApp
PDF
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity Verification
PDF
Designing Decentralized Applications (DApps)
PDF
Cryptography for everyone
PDF
Introduction to HTTP/2 and How To Use It
PDF
IPFS: A Whole New World
PDF
Ethereum virtual machine for Developers Part 1
PDF
Understanding hd wallets design and implementation
PDF
Technical Learning Series - Elixir ExUnit
PDF
Tendermint in a nutshell
PDF
Introduction to CQRS & Commended
PDF
Introduction to aws data pipeline services
PDF
Introduction to Ethereum Smart Contracts
PDF
ArcBlock Presents An Introduction to Blockchain
ArcBlock Introduction to Blockchain
Forge blockchain deployment made easy
Designing Decentralized Apps: Programmable Tokens
Build a Decentralized, public verifiable Database with ex_abci and Tendermint
ArcBlock Presents 5 Winning Factors to Building a Successful DApp
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity Verification
Designing Decentralized Applications (DApps)
Cryptography for everyone
Introduction to HTTP/2 and How To Use It
IPFS: A Whole New World
Ethereum virtual machine for Developers Part 1
Understanding hd wallets design and implementation
Technical Learning Series - Elixir ExUnit
Tendermint in a nutshell
Introduction to CQRS & Commended
Introduction to aws data pipeline services
Introduction to Ethereum Smart Contracts
ArcBlock Presents An Introduction to Blockchain

Recently uploaded (20)

PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PPTX
history of c programming in notes for students .pptx
PDF
AI in Product Development-omnex systems
PPTX
Introduction to Artificial Intelligence
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
medical staffing services at VALiNTRY
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Transform Your Business with a Software ERP System
PDF
Digital Strategies for Manufacturing Companies
PTS Company Brochure 2025 (1).pdf.......
How Creative Agencies Leverage Project Management Software.pdf
2025 Textile ERP Trends: SAP, Odoo & Oracle
history of c programming in notes for students .pptx
AI in Product Development-omnex systems
Introduction to Artificial Intelligence
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Odoo Companies in India – Driving Business Transformation.pdf
How to Choose the Right IT Partner for Your Business in Malaysia
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
medical staffing services at VALiNTRY
Reimagine Home Health with the Power of Agentic AI​
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
wealthsignaloriginal-com-DS-text-... (1).pdf
Design an Analysis of Algorithms I-SECS-1021-03
Transform Your Business with a Software ERP System
Digital Strategies for Manufacturing Companies

Decipher Multi-Factor Authentication - A Developers Introduction

  • 1. Decipher MFA Brought to you by Boshan Sun 1
  • 3. MFA • Multi-Factor Authentication MFA • Two-Factor Authentication 2FA 3
  • 4. 4
  • 6. Tech behind • otp • hotp • totp • hmac • sha • base32 6
  • 7. otp • one-time password, rfc 2289, 1998 • prevent replay attack MD5 ENCODINGS Pass Phrase Seed Cnt Hex Six Word Format ==================================================================================== This is a test. TeSt 0 9E87 6134 D904 99DD INCH SEA ANNE LONG AHEM TOUR This is a test. TeSt 1 7965 E054 36F5 029F EASE OIL FUM CURE AWRY AVIS This is a test. TeSt 99 50FE 1962 C496 5880 BAIL TUFT BITS GANG CHEF THY AbCdEfGhIjK alpha1 0 8706 6DD9 644B F206 FULL PEW DOWN ONCE MORT ARC AbCdEfGhIjK alpha1 1 7CD3 4C10 40AD D14B FACT HOOF AT FIST SITE KENT AbCdEfGhIjK alpha1 99 5AA3 7A81 F212 146C BODE HOP JAKE STOW JUT RAP OTP's are good correct 0 F205 7539 43DE 4CF9 ULAN NEW ARMY FUSE SUIT EYED OTP's are good correct 1 DDCD AC95 6F23 4937 SKIM CULT LOB SLAM POE HOWL OTP's are good correct 99 B203 E28F A525 BE47 LONG IVY JULY AJAR BOND LEE 7
  • 8. hotp • hmac-based one-time password, rfc 4226, 2005 8
  • 9. hmac • hash-based message authentication code 9
  • 10. Why do we need hash function? 10
  • 11. hash function • md5(1992) • sha(1995) • sha256/sha512(2001) • sha3(2015) an example show me the money alice ------------------------------------------------------------------> bob show me the money alice ------------------------------------------------------------------> bob 3f3a323ba2bc a problem show me the money show me the honey alice ----------------------------> eve ----------------------------> bob 3f3a323ba2bc 37954357d876 11
  • 12. a potential solution show me the money rA9 sha rA9show me the money -------> f023a7d109f1 sha rA9f023a7d109f1 -------> b15c701d5e63 show me the money alice ------------------------------------------------------------------> bob rA9 b15c701d5e63 rA9 show me the money show me the honey alice ----------------------------> eve ----------------------------> bob rA9 b15c701d5e63 b15c701d5e63 rA9 233999963a1d 12
  • 13. hmac $ erl 1> crypto:hmac(sha,"rA9","show me the money"). <<27,10,170,232,190,54,79,113,69,29,72,245,62,229,197,166,75,195,24,82>> 13
  • 14. hotp • hmac-based one-time password, rfc 4226, 2005 hotp algorithm rA9 hmac(sha,"rA9","0000000000000000") 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 d8 41 ef 1c 96 ac 02 0c d1 a3 32 06 15 58 ec 69 4d d2 3f 32 * ** ** ** ** 2 ef 1c 96 ac 1110 1111 0001 1100 1001 0110 1010 1100 110 1111 0001 1100 1001 0110 1010 1100 1864144556 144556 mfa.erl hotp(Key,C) -> <<_:156,Sz:4>> = Hmac = crypto:hmac(sha,Key,<<C:64>>), <<_:Sz/binary,_:1,N:31,_/binary>> = Hmac, N rem 1000000. 14
  • 15. totp • time-based one-time password, rfc 6238, 2011 totp algorithm unix epoch time 1970-01-01 00:00:00 0 2018-10-23 17:00:00 1540314000 2038-01-19 03:14:07 2147483647 1901-12-13 20:45:52 -2147483648 hotp("rA9",1540314000/30) 386452 mfa.erl totp(Key) -> T = calendar:datetime_to_gregorian_seconds(calendar:now_to_datetime(erlang:timestamp())) - 62167219200, hotp(Key,T div 30). 15
  • 16. mfa ow an example hellokitty/password123 user ------------------------------------------------------------------> server key 996970 key 16
  • 17. Enable mfa key uri format otpauth://totp/GitHub:hellokitty?secret=4fakhx6cibvwwngp&issuer=GitHub 17
  • 18. base32 base32 encoding # rfc 4648 00 A 09 J 18 S 27 3 01 B 10 K 19 T 28 4 02 C 11 L 20 U 29 5 03 D 12 M 21 V 30 6 04 E 13 N 22 W 31 7 05 F 14 O 23 X 06 G 15 P 24 Y (pad) = 07 H 16 Q 25 Z 08 I 17 R 26 2 rA9 01110010 01000001 00111001 01110 01001 00000 10011 1001 01110 01001 00000 10011 10010 14 09 00 19 18 O J A T S OJATS=== # the length of base32 encoded string is always divisible by 8 18
  • 19. simple authenticator implementation mfa.erl totp(Key0) -> T = calendar:datetime_to_gregorian_seconds(calendar:now_to_datetime(erlang:timestamp())) - ?epoch, Key = decode32(string:uppercase(Key0)), hotp(Key,T div 30). hotp(Key,C) -> <<_:156,Sz:4>> = Hmac = crypto:hmac(sha,Key,<<C:64>>), <<_:Sz/binary,_:1,N:31,_/binary>> = Hmac, N rem 1000000. usage $ cat ~/.mfa/config {github,"somerandpassword"}. {gitlab,"somecoolpassword"}. {google,"somegoodpassword"}. $ escript mfa.erl github: 583309, valid in 26s gitlab: 166210, valid in 26s google: 704368, valid in 26s 19
  • 21. How to crack MFA? 21
  • 23. brute force the key $ erl 1> hack:run(). Key is <<91,101,252>>, hotp for 73 is 076127 potential key found <<12,243,176>>, hotp is 076127 potential key found <<41,163,60>>, hotp is 076127 potential key found <<54,214,149>>, hotp is 076127 potential key found <<57,134,46>>, hotp is 076127 potential key found <<57,206,238>>, hotp is 076127 potential key found <<68,189,61>>, hotp is 076127 potential key found <<70,78,253>>, hotp is 076127 potential key found <<90,172,149>>, hotp is 076127 potential key found <<91,101,252>>, hotp is 076127 potential key found <<96,226,141>>, hotp is 076127 ... *** found key <<91,101,252>> in 16s *** 23
  • 24. brute force the key the Erlang way $ erl 1> phack:run(3). Started 12 worker processes. Random generated key is <<154,226,246>>, hotp for 360 is 917202 potential key <<22,72,233>> found by worker <0.172.0>, hotp is 917202 potential key <<67,6,87>> found by worker <0.170.0>, hotp is 917202 potential key <<110,133,18>> found by worker <0.168.0>, hotp is 917202 potential key <<153,173,223>> found by worker <0.166.0>, hotp is 917202 potential key <<197,0,181>> found by worker <0.164.0>, hotp is 917202 potential key <<154,226,246>> found by worker <0.166.0>, hotp is 917202 key <<154,226,246>> found by worker <0.166.0> in 1s 24
  • 25. $ erl 1> phack:run(4). Started 12 worker processes. Random generated key is <<81,10,150,35>>, hotp for 375 is 655173 potential key <<170,170,211,211>> found by worker <0.111.0>, hotp is 655173 potential key <<64,3,113,77>> found by worker <0.116.0>, hotp is 655173 potential key <<106,175,21,120>> found by worker <0.114.0>, hotp is 655173 potential key <<0,5,110,147>> found by worker <0.119.0>, hotp is 655173 potential key <<149,93,101,149>> found by worker <0.112.0>, hotp is 655173 potential key <<170,179,226,52>> found by worker <0.111.0>, hotp is 655173 potential key <<213,98,135,55>> found by worker <0.109.0>, hotp is 655173 potential key <<0,21,166,137>> found by worker <0.119.0>, hotp is 655173 potential key <<149,107,68,31>> found by worker <0.112.0>, hotp is 655173 ... key <<81,10,150,35>> found by worker <0.116.0> in 849s 25
  • 26. Is MFA safe? • https://github.com/sunboshan/mfa analysis key length bits crack time 1 8 ~0s 2 16 ~0s 3 24 ~16s 4 32 ~1.1h 5 40 ~11.7d 6 48 ~8.2y 7 56 ~2099y 8 64 ~537ky 9 72 ~137my 10 80 ~35kmy 26
  • 27. Server implementation • key is long enough, at least 10 bytes(github key length; aws key length is 40 bytes) • recover mechanism • authentication logic 27
  • 28. 28