По поводу 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 для своей транзакции.