QRSA OTP Authentication

1┬ард╣рдЬрд╝рд╛рд░+
рдбрд╛рдЙрдирд▓реЛрдб
рдХреЙрдиреНрдЯреЗрдВрдЯ рд░реЗрдЯрд┐рдВрдЧ
рд╕рднреА
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рдЗрдореЗрдЬ
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рдЗрдореЗрдЬ

рдЗрд╕ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА

рдпрд╣ рдЕрдкрдиреЗ рд╕реЗрд▓ рдлреЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд░реНрд╡рд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб decrypting рджреНрд╡рд╛рд░рд╛ рдПрдХ app рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рд╡реЗрдм рд╕реЗрд╡рд╛ рд╣реИ рдХрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред
(рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рджреЗрдЦреЛ рдХреИрд╕реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЗрд╕ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░)
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рднрд░реЛрд╕рд╛ рджрд▓реЛрдВ рдХреА рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рд╕рднреА рджрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджрд╛рдЦрд┐рд▓рд╛ рд▓рд┐рдпрд╛ рд╣реИ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХ рдЙрдкрдХрд░рдг-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдВрдЬреАрдпреБрдЧреНрдо рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреВрд░реЗ рдЬреАрд╡рди рднрд░ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ (рдЗрд╕рдХреЗ рд░рджреНрдж рд╣реЛрдиреЗ рддрдХ) рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдВрдЬреА рдорд┐рдЯрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

Github рдЯреНрд░реИрдХрд░: https://github.com/sebastiannielsen/QRSA

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ:
1. рдлреЛрди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЖрдзрд╛рд░рд┐рдд рднрдВрдбрд╛рд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рднрдВрдбрд╛рд░рдг рдПрдХ "рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдк" рдлреЛрди рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдлреЛрди рдмрдВрдж рдХрд░ рдЪрд╛рдмреА рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рдмрдирд╛ рд░рд╣реА рд╣реИред
2. рджреБрдХрд╛рди рдкреНрд░рд╛рд░рдВрдн рдХреА рдЬрд╛ рдЪрд╛рд╣рд┐рдПред рдХрднреА рдХрднреА рдПрдХ рдкрд┐рди рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдХреЗ рджреБрдХрд╛рди рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рд┐рд░реНрдл рдПрдХ рдХреБрдВрдЬреА рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдЖрдорддреМрд░ рдкрд░ рдХреБрдВрдЬреА рд░рдЦреЗрдВрдЧреЗ, рдЬрдм рддрдХ рдХреБрдВрдЬреА рдЧреБрдг рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрдЕрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ред
3. рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдлреЛрди рдореЙрдбрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
4. рдлреЛрди рдХреЗ рдЕрдВрджрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЪрд┐рдк, рдкрд░ 2048 рдмрд┐рдЯ рдЖрд░рдПрд╕рдП / рдИрд╕реАрдмреА / PKCS1.5 рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
5. рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдирд┐рд╣рд┐рдд рдлреЛрди рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдк рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред

// рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдИ: рджрд╛рдЦрд┐рд▓рд╛ рд▓рд┐рдпрд╛, рдЖрдк URL qrsa рд▓рд╛рдВрдЪ рдЪрд╛рд╣рд┐рдПред рддреБрдо рднреА рдПрдХ рдХреЙрд▓рдмреИрдХ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднрд░реНрддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, qrsa рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ: // uред рдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ 'рдПрд╕' рдкреАрдЫреЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЖрдк HTTPS, рдпрд╛ HTTP рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддрдм рдкреВрд░реЗ рдпреВрдЖрд░рдПрд▓, рдХрд╣рд╛ рдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рдмрд┐рдирд╛, URLSafe Base64 рдкреНрд░рд╛рд░реВрдк рдореЗрдВред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА URL рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдЕрд╕рдВрдЧрдд рд╣реИ, рддреЛ рдпрд╣ INCOMPATIBLE_DEVICE рдФрд░ рдЕрдкрдиреА рдЕрдкрдиреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реМрдЯрдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрдердХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред

рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк URL qrsa рд▓рд╛рдВрдЪ: // рдпрд╛ qrsa: // рд╕реА рдкреНрд░рд╛рд░реВрдк рдЧрджреНрджреА :: :: рдУрдЯреАрдкреА рд╕рдВрджреЗрд╢ :: :: рд╣реИрд╢ рдЧрджреНрджреА рдореЗрдВ рдЖрд░рдПрд╕рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рда рдХреЗ URLSafe Base64 рдЗрдирдХреЛрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛ред "рдПрд╕" рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реНрдХреИрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдУрдЯреАрдкреА рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред "рд╕реА" рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ рдУрдЯреАрдкреА рдХреЛрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдореЗрдВ рдмрдЬрд╛рдп рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рддреБрд░рдВрдд рдУрдЯреАрдкреА рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдЪрд┐рдкрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣реИрд╢ рдУрдЯреАрдкреА + рд╕рдВрджреЗрд╢ + рдУрдЯреАрдкреА, рдЬрд╣рд╛рдВ + рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрдбрд╝реА рдЕрд░реНрде рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рдПрдордбреА 5 рдмрдирд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рд╣реИрд╢ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рда рдкрд░ рдмрдврд╝рдиреЗ рдХреА рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд╣рдорд▓реЛрдВ рдХреЗ рдХреБрдЫ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдкреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред sandwiched рдирд┐рд░реНрдорд╛рдг рдУрдЯреАрдкреА рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрдХ рдмрдврд╝рдиреЗ рд╕реЗ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдХреЗ рдПрдХ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рд╣реИ рдХрд┐ рдлреЛрди рдХрд░рдиреЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдФрд░ / рдпрд╛ рдХреЙрдкреАрд░рд╛рдЗрдЯ рдХреЗ рдЙрд▓реНрд▓рдВрдШрди (рдПрдВрдбреНрд░реЙрдпрдб рдФрд░ рдЕрдиреНрдп рдХреНрд╖реБрдзрд╛ рдХреА рдпреВрдЖрдИ рдХреЙрдкреАрд░рд╛рдЗрдЯ рдХреА рд░рдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрд╕рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред

рдЕрдЧрд░ рд╡рд╣рд╛рдБ app рдкрд░ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рд╣реИ, рддреЛ рдЖрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдореБрдХреНрдд рд╕реНрд░реЛрдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХреЛрдб рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ GitHub рдкреГрд╖реНрда рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ GitHub рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдХреА рддрд╛рд░реАрдЦ
1 рдЕрдЧре░ 2016

рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛

рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛, рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░, рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдФрд░ рд╢реЗрдпрд░ рдХрд░рддреЗ рд╣реИрдВ. рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдЬреА рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ. рдпреЗ рдЖрдкрдХреА рдЬрдЧрд╣, рдЙрдореНрд░, рдФрд░ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рддрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ. рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдбреЗрд╡рд▓рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рддреАрд╕рд░реЗ рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдбреЗрдЯрд╛ рд╢реЗрдпрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рдбреЗрд╡рд▓рдкрд░ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рд╢реЗрдпрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдиреЗрдВ
рдХреЛрдИ рдбреЗрдЯрд╛ рдЗрдХрдЯреНрдард╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛
рдбреЗрд╡рд▓рдкрд░ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдиреЗрдВ

рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ

1.4:
- Added Md5 hash verification, to further protect against malleability attacks.
1.3:
- Improved code so the app can more reliable kill itself.
1.2:
- Added OTP into @string/app_name to match Google Play app name.
1.1:
- Changed enroll function to exclude linebreaks in the public key.
- Added new "u" enroll function. Read the description or GitHub page for more information. The "u" enroll function is recommended when enrolling from a computer.