QRSA OTP Authentication

рез┬ард╣+
рдбрд╛рдЙрдирд▓реЛрдб
рдЖрд╢рдп рд░реЗрдЯрд┐рдВрдЧ
рдкреНрд░рддреНрдпреЗрдХрдЬрдг
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЗрдореЗрдЬ
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЗрдореЗрдЬ

рдпрд╛ рдЕтАНреЕрдкрд╡рд┐рд╖рдпреА

рд╣реЗ рдПрдХ рд╡реЗрд│ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд│ рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡реНрд╣рд░ рдХрд░реВрди рдПрдирдХреНрд░рд┐рдкреНрдЯ рдбреАрдХреНрд░рд┐рдкреНрдЯ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реЗрд▓ рдлреЛрди рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдПрдХ рдЕреЕрдк рдЖрд╣реЗ. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реА рдкрджреНрдзрдд рд▓рд╛рдЧреВ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡реЗрдм рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдирд╛рд╣реА.
(рд╕рд░реНрд╡реНрд╣рд░-рд╕рд╛рдЗрдб рдпрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╕реЗ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА github рдЯреНрд░реЕрдХрд░ рдкрд╣рд╛)
рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рд░рд╛рд╣реВрди рдкрдХреНрд╖ рдЕрдорд░реНрдпрд╛рджрд┐рдд рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рд╕рдорд╛рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреА рд╕рд░реНрд╡ рдкрдХреНрд╖рд╛рдВрдирд╛ рдмрд░реЛрдмрд░ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ рдореНрд╣рдгреВрди. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдиреЛрдВрджрдгреА рдХреЗрд▓реА рдЖрд╣реЗ рдПрдХрджрд╛, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрдкреВрд░реНрдг рдЖрдпреБрд╖реНрдпрд╛рдд рдЙрдкрд╕реНрдерд┐рдд рдЖрд╣реЗ рдХреА рдПрдХ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕-рд╡рд┐рд╢рд┐рд╖реНрдЯ keypair (рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рдкрд░реНрдпрдВрдд) рдирд┐рд░реНрдорд╛рдг. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрджреНрдпрддрдирд┐рдд рдорд╛рддреНрд░ рдХреА рдорд┐рдЯрд╡рд▓реА рдирд╛рд╣реАрдд.

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

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

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

рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг URL qrsa рд╕реБрд░реВ: // s рдХрд┐рдВрд╡рд╛ qrsa: // рдХ рд╕реНрд╡рд░реВрдк рдХрдкрдбреЗ :: OTP :: рд╕рдВрджреЗрд╢ :: рд╣реЕрд╢ :: рдХрдкрдбреЗ рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб рдордЬрдХреВрд░ RSA рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреА URLSafe рдиреЛрдВрджрд╡рд╛ Base64 рджреНрд╡рд╛рд░реЗ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реА рдбреЗрдЯрд╛ рдЧреЗрд▓реЗ. "рдЪреЗ" рдХреНрд░рд┐рдпрд╛ рд╕реНрдХреЕрди рдШрдЯрдирд╛ рд░рдЪрдирд╛ рдЖрдгрд┐ рд╕реНрдХреНрд░реАрди рд╡рд░ OTP рдордЬрдХреВрд░ рджрд░реНрд╢рд╡рд┐рд▓реЗ рдЬрд╛рдИрд▓ рдЖрд╣реЗ. "рдХ" рдХреНрд░рд┐рдпрд╛ рдХреНрд▓рд┐рдХ рдЗрд╡реНрд╣реЗрдВрдЯ рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ. рдлрд░рдХ рдХреНрд▓рд┐рдХ рдЗрд╡реНрд╣реЗрдВрдЯ OTP рдХреЛрдбрдЪреА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХреНрд▓рд┐рдХрдмреЛрд░реНрдбрд╡рд░реВрди рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд▓рдЧреЗрдЪ OTP рдХреНрд╖реЗрддреНрд░рд╛рдд рдЖрдд рдХреЛрдб рдкреЗрд╕реНрдЯ рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрддрд╛, рддреНрдпрд╛рдРрд╡рдЬреА рдареЗрд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЛ рдЖрд╣реЗ.
рд╣реЕрд╢ OTP + рд╕рдВрджреЗрд╢ + OTP + рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд░рдордмрдВрдз рджрд╛рдЦрд╡рдгреЗ рдЬреЗрдереЗ рдмрд╛рд╣реЗрд░ рдПрдХ MD5 рддрдпрд╛рд░ рдХрд░реВрди рдмрд╛рдВрдзрдгреНрдпрд╛рдд рдЖрд▓реЗрд▓реЗ рдЖрд╣реЗ. рдпрд╛ рд╣реЕрд╢ рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб рдордЬрдХреВрд░ malleability рд╣рд▓реНрд▓рд╛ рдХрд╛рд╣реА рдЦрд░рдмрд░реАрдд рдлреЙрд░реНрдо рд╕рдВрд░рдХреНрд╖рдг. рдЦреЛрд▓ рдмрд╛рдВрдзрдХрд╛рдо OTP рдЖрдгрд┐ рд╕рдВрджреЗрд╢ рджрд░рдореНрдпрд╛рди рд╡рд┐рднрд╛рдЬрдХ рд╣рд▓рд╡реВрди рдПрдХ рд╣рд▓реНрд▓реЗрдЦреЛрд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ.

рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдЕреЕрдкрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реЗрддреБрдкреБрд░рд╕реНрд╕рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдордзреНрдпреЗ рд╕реБрд╕рдВрд╡рд╛рдж рдХреЙрд▓рд┐рдВрдЧ рд╡рд░ рджрд┐рд╕реВрди рдПрдХ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рджреНрд╡рд╛рд░реЗ рдЙрдкрд▓рдмреНрдз рдХреЗрд▓реА рдЖрд╣реЗ, рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдЖрдгрд┐ / рдХрд┐рдВрд╡рд╛ рдХреЙрдкреАрд░рд╛рдЗрдЯ 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.