January 30, 2023

TOTP на bsc

320 дней назад команда токена FEG представила свое видение 2fa на блокчейне. Идея схожа на multisig кошельки. Они настолько уверены в качестве реализации, что опубликовали сид кошелька, в котором есть 21000$feg.

Сайт https://grafene.com/

GrafeneWallet. 20k$ 0x754bbc2e546686d3e4288602d6122a03f44865c8

TFA контракт 0x21c8b69260F959cACef48D25ee27CF58253FFB8E

TFA.set():

  1. Может вызвать только админ контракта TFA, доступа к кошельку нет.
  2. Установить окно валидности salt (большое псевдослучайное число) в 60 секунд от block.timestamp
  3. Создать salt из нескольких переменных fegBalanceWei, index, block.timestamp, 1647354260(время создания TFA))
  4. index++
  5. salt = index + (103 * (4 * block.timestamp) + (index * block.timestamp) + (4 * fegBalanceWei / 98) + (index * fegBalanceWei / 98) + (fegBalanceWei / 99) - 10500000 / 99) + ((fegBalanceWei / 98) + (fegBalanceWei / 99) / 2) + stor5 + -block.timestamp + 1647354260 + 4

TFA.see()

  1. Если прошло 60 секунд от TFA.set(), revert
  2. Возвращает salt

GrafeneWallet.WithdrawTokens(2faCodeInt, ...)

  1. Проверка, что 2faCodeInt == TFA(code).see()
  2. Проверка что вызывает админ

Для вывода токенов с такой защитой необходимо знать два кошелька: кто создал Grafene wallet контракт с токенами и кто имеет право на TFA.set().