По поводу TapLogin он опенсорсный? Мой внутренний параноик отказывается использовать проприетарный код для подобных целей

Если нет, могу предложить такой вариант в духе Google Authenticator:
1.
https://www.ietf.org/rfc/rfc2104.txtHS = HMAC-SHA1(K, text)
K ключ
text авторизуемая транзакция в человекочитаемом текстовом виде.
2.
https://www.ietf.org/rfc/rfc4226.txtOTP = Truncate(HS)
На RFC 4226 непосредственно ссылается Google Authenticator (
RFC 6238).
Соответственно, можно текст транзакции отображать хоть на сайте QR-кодом, пользователь считает его телефоном, проверит корректность транзакции на телефоне, после чего введёт одноразовый код.
UPD. В text очень рекомендую записывать также время формирования транзакции и не разрешать переводы, подтверждающий код на которые приходит очень поздно. Иначе взломщик сможет тупо последовательно перебрать все комбинации OTP для своей транзакции.
TapLogin не опенсорсный...
Спасибо за предложение!
Ваш способ, очевидно, можно попробовать использовать. Но пользователям прийдется обязательно всегда читать QR-код с экрана для проверки подлинности каждой транзакции и потом еще код вводить. То есть этот способ будет работать только для смартфонов с нормальными камерами. И это, очевидно менее удобно, чем в онлайне одной кнопкой подтвердить.
Но можно сделать такой способ опциональным. То есть, чтобы его можно было установить вместо Таплогина, тем, кто желает.