QRSA OTP Authentication

рез┬ард╣рдЬрд╛рд░+
рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХрд╛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ
рд╕рд╛рдордЧреНрд░реАрдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди
рд╕рдмреИрдЬрдирд╛
рд╕реНрдХреНрд░рд┐рдирд╕рдЯ рдЫрд╡рд┐
рд╕реНрдХреНрд░рд┐рдирд╕рдЯ рдЫрд╡рд┐

рдпреЛ рдПрдкрдХрд╛ рдмрд╛рд░реЗрдорд╛

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

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

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

// рдИ рдмреНрд░рд╛рдЙрдЬрд░ рд╡рд╛ similiar рджреЗрдЦрд┐: рднрд░реНрдирд╛ рдЧрд░реНрди, рддрдкрд╛рдИрдВ URL qrsa рд╕реБрд░реБ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпреВ // рддрд┐рдореА рдкрдирд┐ qrsa рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рдПрдХ рдХрд▓рдмреНрдпрд╛рдХ URL рдорд╛рд░реНрдлрдд рднрд░реНрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпреВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рддрдкрд╛рдИрдБрд▓реЗ рдкрд╣рд┐рд▓рд╛ рддрдкрд╛рдИрдВ HTTPS, рд╡рд╛ HTTP рдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╣рд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдПрдХ "рдХреЛ" рдердкреНрди рдкрд░реНрдЫред рддреНрдпрд╕рдкрдЫрд┐ URLSafe рдЖрдзрд╛рд░ 64 рдкреНрд░рд╛рд░реВрдк, рдпреЛрдЬрдирд╛ рдмрд┐рдирд╛, рд╕рд╛рд░рд╛ URL рднрдирд┐рдиреНрдЫ рдЧрд░реНрдиред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреА URL рдХреЛ рдЕрдиреНрдд рд╕рдВрд▓рдЧреНрди рдЧрд░рд┐рдиреЗрдЫред рдЙрдкрдХрд░рдг рдЕрдиреБрдкрдпреБрдХреНрдд рдЫ рднрдиреЗ, рдпреЛ INCOMPATIBLE_DEVICE рд░ рдпрд╕рдХреЛ рдЖрдлреНрдиреЛ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЕрд░реНрдердкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢ рдлрд┐рд░реНрддрд╛ рдЖрдЙрдиреЗрдЫреБред

рдкреНрд░рдорд╛рдгрд┐рдХрд░рдг рдЧрд░реНрди, рддрдкрд╛рдИрдВ URL qrsa рд╕реБрд░реБ: // s рд╡рд╛ qrsa: // рдЧ рдкреНрд░рд╛рд░реВрдк padding :: рдУрдЯрд┐рдкреА :: рд╕рдиреНрджреЗрд╢ :: рд╣реНрдпрд╛рд╕ :: padding рдорд╛ RSA рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреА рдЧреБрдкреНрддрд┐рдХрд░рдгрдЧрд░рд┐рдПрдХреЛрдкрд╛рдардлреЗрд▓рд╛рдкрд░реЗрди рдХреЛ URLSafe рдЖрдзрд╛рд░ 64 рд╕рдЩреНрдХреЗрддрди рдбрд╛рдЯрд╛ рджреНрд╡рд╛рд░рд╛ рдкрдЫреНрдпрд╛рдПред "рдПрд╕" рдХрд╛рд░реНрдп рд╕реНрдХреНрдпрд╛рди рдШрдЯрдирд╛рд╣рд░реВ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рд╕реНрдХреНрд░рд┐рдирдорд╛ рдУрдЯрд┐рдкреА рдкрд╛рдардХреЛ рд░реВрдкрдорд╛ рджреЗрдЦрд╛рдЙрдиреЗрдЫред рдпреЛ "рдЧ" рдХрд╛рд░реНрдп рдХреНрд▓рд┐рдХ рдШрдЯрдирд╛рд╣рд░реВ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫред рдлрд░рдХ рднрдиреНрдиреЗ рдХреНрд▓рд┐рдХ рдШрдЯрдирд╛рд╣рд░реВ рдУрдЯрд┐рдкреА рдХреЛрдб рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд░реБрдиреНрддреИ рдУрдЯрд┐рдкреА рдХреНрд╖реЗрддреНрд░ рднрд┐рддреНрд░ рдХреЛрдб рдЯрд╛рдБрд╕ рдЧрд░реНрди рдЕрдЧрд╛рдбрд┐ рдмрдвреНрди рд╕рдХреНрдЫ рдд, рдмрд░реБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рд░рд╛рдЦреНрдиреБ рдЧрд░реНрди рдХрд╛рд░рдг рд╣реБрдиреЗрдЫ рдЫред
рд╣реНрдпрд╛рд╕ рдУрдЯрд┐рдкреА + рд╕рдВрджреЗрд╢ + рдУрдЯрд┐рдкреА, рдЬрд╣рд╛рдБ + STRING рдЬреЛрдбреА рдЖрднрд╛рд╖ рдмрд╛рд╣рд┐рд░ рдПрдХ MD5 рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрд░ рдирд┐рд░реНрдорд╛рдг рдЧрд░рд┐рдПрдХреЛ рдЫред рдпреЛ рд╣реНрдпрд╛рд╕ рдЧреБрдкреНрддрд┐рдХрд░рдг рдЧрд░рд┐рдПрдХреЛ рдкрд╛рда рдорд╛ malleability рдЖрдХреНрд░рдордг рдХреЗрд╣реА рди рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рдХрд╛ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ред рдпреЛ sandwiched рдирд┐рд░реНрдорд╛рдг рдУрдЯрд┐рдкреА рд░ рд╕рдиреНрджреЗрд╢ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрдХ рд╕рд╛рд░реНрджрд╛ рджреЗрдЦрд┐ рдПрдХ рдЖрдХреНрд░рдордгрдХрд╛рд░реАрд▓реЗ рд░реЛрдХреНрдЫред

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

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

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

рддрдкрд╛рдИрдВрдХреЛ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╛рдЦреНрдирдХрд╛ рдирд┐рдореНрддрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкрд╣рд┐рд▓рд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рдбреЗрдЯрд╛ рдХрд╕рд░реА рд╕рдЩреНрдХрд▓рди рддрдерд╛ рд╕реЗрдпрд░ рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛ рдмреБрдЭреНрди рдЬрд░реБрд░реА рдЫред рдПрдкрдХреЛ рдкреНрд░рдпреЛрдЧрд╕рдореНрдмрдиреНрдзреА рдЬрд╛рдирдХрд╛рд░реА, рддрдкрд╛рдИрдВ рдмрд╕реЛрдмрд╛рд╕ рдЧрд░реНрдиреЗ рдХреНрд╖реЗрддреНрд░ рд░ рддрдкрд╛рдИрдВрдХреЛ рдЙрдореЗрд░рдХрд╛ рдЖрдзрд╛рд░рдорд╛ рдбреЗрдЯрд╛рдХреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рд░ рд╕реБрд░рдХреНрд╖рд╛рд╕рдореНрдмрдиреНрдзреА рдЕрднреНрдпрд╛рд╕рд╣рд░реВ рдлрд░рдХ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдпреЛ рдПрдкрдХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓реЗ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрднрдПрдХреЛ рд╣реЛ рд░ рдЙрд╣рд╛рдБ рд╕рдордпрдХреНрд░рдорд╕рдБрдЧреИ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд╢реЛрдзрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рддреЗрд╕реНрд░реЛ рдкрдХреНрд╖рд╕рдБрдЧ рдХреБрдиреИ рдкрдирд┐ рдбреЗрдЯрд╛ рд╕реЗрдпрд░ рдЧрд░рд┐рдБрджреИрди
рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдбреЗрдЯрд╛ рд╕реЗрдпрд░ рдЧрд░рд┐рдиреЗ рдХреБрд░рд╛рдХрд╛ рдмрд╛рд░реЗрдорд╛ рдХрд╕рд░реА рдЬрд╛рдирдХрд╛рд░реА рдЧрд░рд╛рдЙрдБрдЫрдиреН рднрдиреНрдиреЗрдмрд╛рд░реЗрдорд╛ рдердк рдЬрд╛рдиреНрдиреБрд╣реЛрд╕реН
рдХреБрдиреИ рдкрдирд┐ рдбреЗрдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдПрдХреЛ рдЫреИрди
рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдбреЗрдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдиреЗ рдХреБрд░рд╛рдХрд╛ рдмрд╛рд░реЗрдорд╛ рдХрд╕рд░реА рдЬрд╛рдирдХрд╛рд░реА рдЧрд░рд╛рдЙрдБрдЫрдиреН рднрдиреНрдиреЗрдмрд╛рд░реЗрдорд╛ рдердк рдЬрд╛рдиреНрдиреБрд╣реЛрд╕реН

рдХреЗ рдирдпрд╛рдБ рдЫ

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.

рдПрдкрд╕рдореНрдмрдиреНрдзреА рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛