á¨á¤áľá¤áá¤áľ áááááśá˝ á áŁá áłááá áŁá áááľ á°á¨á áá¨áá፠(2FA) áá´ áá¸áᢠá áŁááŽá˝, á á¤áááľáŽáááľ áĽá á crypto áŚááłáá˝, á ááľáł áłáĽáá˝ áĽá á ááá á áááľ á áááááśá˝ áĽá
á áá áááá;
áá á¨ááľá°áśá˝ á á°ááá á áĽá áá ááŁá áŤáľá¨áľááᣠááááŤáąá áá áá´ á°á áááą áŤáá°á á á ááᢠááĽáá á¨á ááľ á˛á áŤááľ áá° áá ááá°áĽ á¨á°ááá¨á á ááŁáá ááá ááááŞáŤ áá áá - á˛á áŤááľ á˛á á ááĽáŠ á¨áááá°á á áá ááááľ ááᢠ"á˛ááłá ááááĽá áááá°áľ áአáŁáááŤáá˝" "á˛á áŤááąá áĽáá°áá ááá" á¨ááá á ááŤá á ááá áá á áá´áá˝ ááľáĽ áĽá á áá ááá áĽáá°áá˝á á°áááá áá. á°ááá á˛á áŤááąá á¨áááŁá á¨á á¨áá á°áá á¨ááľáá áá áŁááᣠáĽá á¨á¤áááľáŽáááľ áŚááłáá˝á áĽá á¨ááľá ፠ááŞááśáá áĽááłá ááľá°áłá°á áá˝ááᢠáĽá áá´ááŽá á°áŤá°á áጠá ááľá áľáŁ á ááłáá ááá á áá°áľ á°ááśá˝ á áá áá á¨áááá á°á ááĽá ááŤá áá˝ááá˘
á áşá
á¨ááá አá¨á˛á áááá፠áááá˝ á°ááá°áá - áá
á¨ááá áá á áá´ á áá
ááááľ áá á á¨á°á áŤáᢠá¨á á°áá áá á áĽáá°ááŤáááá°á ááá á á
áᥠ2FA á á¤áľá¤áá¤áľ áĽáá°áá°áá áŤáłáŤáᢠáá áá
áĽá¨áá á áá°áá -
á°á
áááą á¨á°á á á ᨠ2FA áá´á á áá áá á¨á ááľ áá áŽáśá˝ á áĽáááźáá á áŠá áĽáá˛á°áĄ ááłáĽ áĽááááŁáá áĽá áá áááááą áŁáá¤áľ áĽáá´áľ ááááľ áĽáá°áá˝á áĽááááááłááá˘
ááłáĄ áá° áááŽáá˝ áááŁá
áĽ.á¤.á . á 2019 á¨á˛á ááááἠááá áá á á 63% á¨ááŻá á ááá°á áááľ áá°á¨áľ, áĽá á¨á áĽáá "á ááŤá áá°áť" 4,000 GBP áá. á áŠá˛áŤ ááľáĽ áľáłá˛áľá˛ááľá á ááááá, áá á¨á áá á¨á¨á áĽáá°áá áĽáááłáá.
á˛á ááááἠáłáá á¨áľáá°áᣠá˘ááľáłááŤáᣠááľáĄáᣠáŞáŹ á áŤáááśá˝áᣠá¨áŁáá ááłáŚá˝á áĽá á á
áᥠáá° ááľáĽáŤá ááááŹáá˝ ááĽáˇá - áááľá¨á
áá á
ááá˘
á áááŚáľ ááľáĽáŁ áááşáá ááľáŤáá á ááŤá á¨áŠá¤áľ á áᤠá
á á˘áŽ
ááś á áá¤á áŚáá˛á á áŠáá¨áá˛á˛á ááľáĽ á áááŁá ááá፠áá. á¨áááľ á ááľ á áá á áłáá á ááá áá á ááłá°áŤáá˘
á¨á˛á áľáá áĽáá´áľ áĽáá°áá°áŤ
"áľáá" áááľ ááááἠáááľ ááᢠá áĽááá áá áá´áá˝ ááááááš á¨á°áááá áľáá ááĽá áá°áááᣠáĽááá áá á˛á áŤááľ áĽáá°áá á áááááľ á¨ááá ááá áĽáá°áá áááľááá áá ááá áłáᢠá ááľá ááłáĽ ááľáĽ á¨á°ááá°á á¨á˛á ááááἠáá á áááľááá˘
- á˘áá°ááááľ á áááááľ. á áá ááŁáŞáá˝ á¨á°áááá á¨áá áá¨á áááŤáᥠáľá áĽá áľáá ááĽáᢠá áááľ áááŽá˝ (áá á áŤá á ááłá¨ áá¨áŚá˝, áá°áá˝) ááľáĽ ááá áá˝áá ááá á¨á°áŁáŁáŞ - á¨ááŁáá áŚááŹá°á á°áŤá°á.
- áááľá˘ á¨á°ááá á˛á áŤááľ á ááˇá; áá áá áááľá¨á á¨á á áŤá˘áá á¨á´ááá áľáá áĽáť áá°áá, ááĽáŠá áááአáĽá áľáአáĽáá°á á ááááŠ.
- áŤááąáŁ ááĽáŠá áá° á˛á áŤááľá á ááľá°ááá ááᢠáĽááá áá áá á¨áá¨áááá á á´ááŽá áŠáŁá፠ááľáĽ áŁáá á°áŁáŁáŞ á áŠá ááá á°ááśá˝á á ááá áá á ááá˘
á áĽááá°á á áááľ á°áá á¨á áá á¨áŁáľ ááᢠá áĽááá˝ á°áááá ááááŁá áĽá á¨áľááŠá áŚáł á á¨áá áá¨áłá°á - á°áááá˘á áá° áŽááá á¨á°áá¨á¨á áľá áá¨á áááá á á ááľ áĽáŤá 1-2 áłáá˛á áŤáľááŁáᢠá¨á˛á áŤááą áŁáá¤áľ áá° áá áĽáá°ááŁáŁ á á˛áľ á˛á áŤááľ ááááŁáľ á áááá áłáá ááľáĽ áŤáá áĽáŤ á áľáŞáŤá áá á°áľááá°ááᢠááá 50 áśáá áŤá á áá (áá¨áá á ááá - á á°ááŤáŠ á ááŽá˝ áĽá á¨á°ááŤáŠ áŚááŹá°áŽá˝ ᨠ20 áĽáľá¨ 100 áśáá) ᣠáĽáŤ á áľáŞáŤá á áŁá á á¨á áááł á¨áĽáŤ ááŁá¨áŤá - ááá ááá áááááľ á¨áá áľáá˘
á áá ááá á¤áľá¤áá¤áľ á á áĽááá˝ ááá áá, áĽá á¨áľáአáŁáá¤áľ ááá ááá ááľá¨á á áá˝áá - áĽáą áá áá. áĽá á¨á፠á°ááŽáááš á¨á°áááá áááá áááŤáá˝ áŤááá áĽá á¨á°ááá á¨ááá ááá˝á ááááŠá˘
á¨á°á°á¨ááá á¨áááá áĽáľáá˝
áŁááŽá˝ á ááłááľ áá á°áááá˝á áááááľ áááłá áĽá á¨ááłáŁá¸á ááááŽá˝á áŤááĄáłáᢠáľááá , áĽáá°áá áŁáááá ᨠfiat áááἠááááľ ááťáá. áá á cryptocurrency wallets ᣠááá ááá á¨á áá á¨á°ááłá°á áá - áĽá á á´ááá, áĽá á á á. áĽáľáŤáá áľá¨áľ ááá á áááľ á¨áááááŤ/á¨áŞáľ áŚááł á°áááá˝á á¨ááááἠáŤáł á áá°á¨ááá˘
á°ááááš ááááŁá¸áá á áááľ á¤áľ ááá¨áá¨á á¨ááá áŚááŹá°áŠá ááá
áłá-á¨ááłáĄ áááἠáááľá¨á
áááłáá˝á ááĽáŻá. áĽáą áŤá°á¨ááá áá
áá ááá˘
áĽáľáŤáá áľá¨áľ á¨áľááá áááľ á¨ááŞááś ááááŹáá˝á áŁáá¤áśá˝ á á
áá ááááľ ááá á á
á¨áá°áŤ áĽá
áľ á¨áááᢠáŤááłááá áááľá ááá áá áá ááŤáŤáť áááá á á¨áááťá áá. áľááá
, á¨ááááἠáĽááľá áá¨áá¨á áá¤áąá á¨ááľá°áááľ á¨á áá ááá áá. á áŁá ááá˝ á¨ááá ááááľ á 2FA áá áἠá áľá°ááá "ááá°á á°á¨á" áá áá áá.
á á¤áľá¤áá¤áľ á áŠá á¨2FA áĽá¸áá á˝áá á¨á˛á ááááἠá áá°ááá˘
á¨á¤áľá¤áá¤áľ áá¨áá፠áŽáśá˝ á¨á´áááŤá áĽááł á ááťá á°á
áááłá¸á á¨á°á á á á áá°ááᢠá á˛ááááá á˛áľá°á 7 (SS7) ááááľ ááľá¨á፠áľáááľ ááľáĽ áŁá ááłá á°áááááśá˝ ááááŤáľ áááĽááśá˝ áá áá áá˝ááᢠ2á¤áᤠá¨á¤áľá¤áá¤áľ á áá á°á
áááą áŤáá°á á á áĽáá°áá á áá ááłááá (á¨áŠá¤áľ áĽááŤá á¨á°á¨ááá˝ áĽá á´áááá á˘ááľá˛áľáŠáľ á áĽááą ááľáĽ áĽáá˛á
áááá˘
á á°ááłáłá áá, 2FA ááአáĽááá áá áá°á ááá á¨á°áłáłá° á¨á°á áááľ áľááľ áá°á áá, áĽá ááá á¨ááá áá ááááŁá. áľááá áĽáá˛á ááááą áá¨áá፠á áľá¸á᪠á áŤá°áááá, ááá áá á áĽá áá° áááŤá áĽáá˛á°ááľ áŤááťáťá.
áĽá áĽá áá á¤áľá¤áá¤áľ á¨á¨á á áá áááá¨áľ áá áááŁá ááá á ááŤá˝ á áá°ááľáá˘
áá° 2FA ááá˝ ááááśá˝
áĽááἠááᣠá áľáááľ ááá˝ áĽá á á¤áľá¤áá¤áľáŁ á áá áĽáá° á˝áĽáá á áá°á°á á°á áᢠáá° 2FA ááá˝ ááááśá˝ á áᢠáááłá, á¨á ááľ áá ᨠTAN áŽáśá˝: áĽááłá áá´, áá á¨áá°áŤ - á ááá á á ááłááľ áŁááŽá˝ ááľáĽ áĽá á áá áááá. á¨áŁáŽááľáŞá áá¨áá á¨áá áá áľáááśá˝ á á-á¨áŁáľ á áťáŤáὠᣠá¨áŹá˛á áľáŤáᢠááá á¨á ááşááľáŁ á¨á áľá°áááááľ áĽá á¨áá á ááťá ááááŤáłá áľááááľ á¨áááľáá á ááŤá á2FA á¨á°á°áĄ á áááŹá˝áá˝ ááᥠRSA TokenᣠGoogle AuthenticatorᢠáĽá á¨á፠á áŤáá áááá˝ áĽá ááá˝ áá´áá˝ á á.
á ááľá ááłáĽ, ááá ááá ááááŤáłá áĽá á áľá°ááá áááľáá. áá á á°ááŁá áá, áááá ᨠ2FA áááľááá˝ á˝ááŽá˝ á ááŁá¸á, áĽá á áĽááą ááááŤáľ, áĽáááłá á¨á°á á áá ááá áááŤá.
áĽáá°
áĽá 2FA áá´áá˝ ááłá¨áť áá áá á¨áá ááááľ áá á¨á°ááŤá áá¸áᢠᨠTAN ááá áá á áŤáá ááá ááá áááá áá á ááá áá°á¨á áá˝ááᢠá áá á ááá á á¨ááá áá á ááłá á°ááᎠá ááᢠá áá áá°áá áŞáŤ á¨ááááŞáŤáŹ áľáááľáá á°á áá˝áˇá - á¨áááŤáá˝ ááłá¨áťá áá°áá á¨á áľ á¨ááááľ áľáŤáŹá á áá°ááááᢠááá á˝áá áá° á á˛áľ ááŁáŞáŤ ááá¨á ááᢠGoogle á á¨ááá á á°á áááľ ááááŤáśá˝ áá° áá á áááá (áááá˝ áá° áá ááá á¨áťá á°á áááą áááľá áá?) á áá´ áááášá á áĽá á áľá°ááááŤáá, á¨ááŤá á¨áľáŽáá áľáááľáá á áá°áá°áŞáŤ áá á áłáĽá ááľáĽ áá°á ááá áĽáá°áá áá°ááŠ.
ᨠ2FA áá´ á¨áá¨á°áá ááá á áá áľ:
- á°á áááą á¨á°á á á - áá° áááŤá áááŁáľ áŤááĽááľ áĽááľá áĽáť áĽáá á°áá ááŚá˝ á áá°áá
- á áľá°ááá - á ááááľ áá áá° áááŤá ááłá¨áť áŤááá
- ááš áĽá á°ááŁáŁá - 2FA áá áá ááá˝ áá áĽá á˘áŤááľ áá áááľáłá
- ááŤá˝
áĽáááźáá áľáááá áááľá áá áĽáá áĽáááááá˘
á áĽáááźáá áá 2FA áá áá
áá ááľ á°á áá á áĽáááźáá áá áŤáá 2FA á¨á ááľ áá áŽáśá˝á á á¤áľá¤áá¤áľ á¨ááá á áá á°ááłáłá ááᢠááŠááą á áááŞáŤ áťáá áá áĽáť ááᢠᨠ2FA áŽáľ áááááľ ááááą blockchain á ááŤááá á áá ááá°áá. á ááŽáááłá˝á ááľáĽ (áá¨á á áĽá ááá፠ááľáĽ áá) áá á¨áľá áá°áá áŞáŤ áá, áśá, á áá¤áľ, á ááľáŽááľ, ááááľ, áááśááľ, áááŚá¤áľ.
á áááááą á¨á ááľ áá áŽáľ áŤáááŤá áĽá á áĽáááźáá áá áá° áááĽáá°áá áááŤáᢠá°á¨á᪠- áĽáá° ááá˛ááľ: á°á ááá á¨á°áá ááá áŽáľ á á áááááľ á áááá˝ ááľáĽ áŤáľáᣠáĽá áá° ááľáĽ áááŁá.
á á˝áá
- áá፠áááá á á ááľ á á áł - ááá áľááŽá˝ ááá á˘áááá˝ á¨ááá˘
- ááá 2FA áŽáľ áŤáá¸á áááááśá˝ á¨áŤá áĽáľá¨ áŤá á¨áá25519xsalsa20poly1305 áá á¨á°áá°á አáá¸áá˘
- ᨠMITM áĽááľ á°áááˇá - áĽáŤááłááą 2FA áŽáľ áŤáá áááĽááľ á áĽáááźáá áá á¨áá°á¨á ááĽááľ áá áĽá á Ed25519 EdDSA á¨á°áá¨á ááá˘
- á¨2FA áŽáľ áŤáá áááĽááľ á áŤáą áĽáá ááľáĽ áááŁáᢠá¨áĽááŽá˝ á á°á á°á¨á°á áĽá á¨áá áá á°á ááłá¨á á áá˝áá ᣠáĽá áľááá á¨áááĽááśá˝ á á°á á°á¨á°áá˘
- á¨áááĽááąá "áľááááááľ" á¨ááŤá¨ááἠááá¨áá ááá á á¨ááᢠáá á¨áá¨áááá á á፠áááŁáŁáľ áá á á°áá°á¨á° á á°á°áŤá¨ á¨á áááá˝ áľáááľ áá, áĽá á á°á áááá˝ áŁáá¤áľááľ á¨á°áŤá áá.
- áá°áá¨á á áá°áťáá - áááŤáá˝ ááłááą á áá˝ááᣠáĽá áááááśá˝ áá°á¨á á áá˝ááá˘
- 2FA áŽáśá˝á á ááááá áá á¨ááááá ááłáŞáŤ ááľá¨áąá˘
- á 2FA áŽáľ á¨áááááľ ááľá¨áť áá¨áááŤá˘ á¨á ááľ áá á¨ááá ááá á¨ááá á áááááľ á áľááá áĽáá°á°á¨á° áŤáááᢠ"áĽáá°áá á áľááŁ" á ááŤáŽá˝ á¨ááá˘
á¨ááá˝ á¨2FA áá´áá˝ áá ááááááᣠá áá á¨áĽ á ááá áťáááĄ-
á°á ááá á á ááľ á°á¨ááľ ááľáĽ áŽáśá˝á áááá á á áĽáááźáá áááĽáá°á ááľáĽ áá፠ááá áá - ááááŁáľ á¨ááá áá¨á áĽáť áĽá
á áá ááááᢠáľááá
, á¨áá°áá áŞáŤá áá´áá˝ á¨á°ááŤáŠ ááá áá˝áá-áááá á áááááśá˝ áŽáśá˝ áááá á á ááľ áá፠áá áá áá˝áá, ááá ááĽáŤááłááą á áááááľ á¨á°áᨠáá፠ááá á áá˝áá.
á á°á¨ááŞá á ááľ á˝áá á á - áááŤá á˘áŤááľ á ááľ ááĽááľ ááá¨á áááŁá. á°á ááá á˘áááŞááľáľ á¨á°á°á¨á áááĽááľ á¨áŽáľ áá áĽáá˛á°ááľ áŁá¨á áἠáááá ááá áŤáľáááááłá áŁáĽáá á áĽáááźáá ááľáĽ á¨ááłá¨á á¨ááááŞáŤá ááĽááľ áá áĽáť ááᢠáĽá áĽáá°áá ááĽá°áá: á áŞáľ áŚááł ááľáĽ áá áśá¨áá˝á áááááľ á áľá˝ááá. ááá ááᣠáá áἠáľááááá áááľá áááŤáá ááá ááá áá°á¨á ááᢠ(ááááááᣠá¨áá፠ááĽá á ááᢠU1467838112172792705 á¨á áἠááá á¨ááᨠááᢠcc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. ááááĽáá°áá, áá á¨á áá ááš áĽá ááá ἠá¨áá˝á áá, ááá áá 2FA áŽáśá˝á áááá áľáááą áá áá°áĽ áá). áĽá áĽáá°ááľá á áá°ááľ á ááľ á°á áĽáá˛á á áááľ ááłá áŤá°ááá áĽá "áážáľ áĽá á°á°áŤá˝ááľ" áá° á á¨ááá´ áá áŤáááłá áłá.
ᨠ2FA áŽáľ á¨ááá áá á áĽáááą áá á°á áá - 0.001 ADM ᣠá áá 0.00001 áśáá ááᢠá áľáá, á¨áĽááľáá blockchain á¨á ááľá¨á áĽá áááá áᎠááľá¨á áá˝áá.
2FA á áĽáááźáá á¨á áááááľá áá áĽáá´áľ áĽáá°áááá
áĽááľ á ááŁá˘áá˝ á¨áĽáááźáá áááľ áá° á áááááłá¸á ááá¨áá ááááľ áĽááłáá á°áľá á á°ááááá˘
á¨áááĽáá°ááá ááłá á áá áá áá áá áĽáá´áľ ááľá¨á áĽááłááĽá áĽáááááłáá ᣠáĽá á á ááłáłáŠ ᣠáá áĽáááźáá áá áá áá˝ááᢠá 2FA ááłáŤ áá°áá áŞáŤ ááľáĽ á¨áá፠áá¨áá ááá¨áá¸áľ postgresql10 áĽá¨á°á ááá ááá˘
á¨áááááľ á°á¨ááá˝
- 2FA áŽáśá˝á á¨ááľááá áľ blockchain áá áá፠áá áᢠáááááśá˝á á áŽáśá˝ ááááľá á áĽá ááĽááśá˝á áááá¨á áĽáá° á¨áá ááá á¨ááŤáááá á¨ááá áá¨á áá°ááľááłáá˘
- 2FA áŽáśá˝á ááááá¨áľ áá° á ááááá áľááŞááľ áŤááᢠá¨áŚá˛á á á ááŚáľ áá áá áááááá á¨2FA áá´ áĽá¨á°á áá á¨ááᣠáá á á°á¨á á áľááľáá á á ááááá˘
- á áĽáááźáá áááĽáá°á ááľáĽ áá°á ááá áŽáľ áááá áľááŞááľ áá° á ááááá áŤááá˘
- 2FA áŽáľ áááľááŁáľ áĽá áááľááŁáľ á¨á°á áá á áááá˝ ááá áŠá˘ á¨áŚá˛á á á ááŚáľ áá áá áááááá á¨2FA áá´ áĽá¨á°á áá á¨ááᣠáá á á°á¨á á áľááľáá á á ááááá˘
1 áá፠ááá áŠ
á áĽáááźáá áá áá፠ááá á á¨áá áááᣠááá ááá áĽá á¨áĽáą á¨á°áá áá፠á áľáŤáť ááá á ááá˘
á ááááŞáŤáŁ BIP39 á¨ááá áá¨á ááá áŤáᣠáĽá SHA-256 áá˝ á¨áĽáą áá°ááᢠáá˝ á¨áá ááá ks áĽá á¨á
áἠááá kp áááá á áá á
ááᢠá¨á á°áŁáŁá áááᣠá áľáŤáťáá á áĽáááźáá ááľáĽ á¨ááááá áŤá SHA-256 á¨á°ááá˘áŚá˝ áá ááá˘
á áĽáŤááłááą áá 2FA áŽáśá˝á á¨á á˛áľ áá፠áááá á¨ááá áá፠áááá á áŽáľ áá° á áááአáá¨áá á áá áľá˘
import Mnemonic from 'bitcore-mnemonic'
this.passphrase = new Mnemonic(Mnemonic.Words.ENGLISH).toString()
âŚ
import * as bip39 from 'bip39'
import crypto from 'crypto'
adamant.createPassphraseHash = function (passphrase) {
const seedHex = bip39.mnemonicToSeedSync(passphrase).toString('hex')
return crypto.createHash('sha256').update(seedHex, 'hex').digest()
}
âŚ
import sodium from 'sodium-browserify-tweetnacl'
adamant.makeKeypair = function (hash) {
var keypair = sodium.crypto_sign_seed_keypair(hash)
return {
publicKey: keypair.publicKey,
privateKey: keypair.secretKey
}
}
âŚ
import crypto from 'crypto'
adamant.getAddressFromPublicKey = function (publicKey) {
const publicKeyHash = crypto.createHash('sha256').update(publicKey, 'hex').digest()
const temp = Buffer.alloc(8)
for (var i = 0; i < 8; i++) {
temp[i] = publicKeyHash[7 - i]
}
return 'U' + bignum.fromBuffer(temp).toString()
}
á ááłáŤ áá°áá áŞáŤ ááľáĽ ááá á áľááááá - á áľá áá°áá áŞáŤ ááľáĽ á ááľ áá፠áá áá áĽá á¨áĽáą áŽáľ áĽáááŤááᢠá á áĽááááš áááłáá˝ áá áá°á ááá á¨á áá ááš áá-á áááááą 2FA áŽáśá˝á á¨á ááľ á¨á°áá°á áá፠áĽáá°ááá áŤááá áĽá áá°ááá áá˝ááá˘
2 2FA áŽáśá˝á á áááá¨áľ áá
ááĽáŤááłááą á°á áá ááá˘áŤ 2FA áŽáľ ááá á á áá áľá˘ á¤á° ááá
ááąá áĽáá áááá
const hotp = speakeasy.hotp({
counter,
secret: account.seSecretAscii,
});
á á°á ááá á¨ááŁá á¨2FA áŽáľ áľááááááľ áá¨áááĽáĄ-
se2faVerified = speakeasy.hotp.verify({
counter: this.seCounter,
secret: this.seSecretAscii,
token: hotp,
});
3 á¨2FA áŽáľ á ááľááŁáľ áá
á¨2FA áŽáľ áááá blockchain node APIᣠJS API Library ááá áŽááśá áá áá áľá˝ááá
ᢠá áá
ááłá, áŽááśáá áĽáá áááá - áá
á¨áľáĽáá ááľáá á áááá˝ áá, ᨠblockchain áá áŤááá áááááľ á¨ááŤááá áááááŤ. á 2FA áŽáľ áááĽááľ áááá áľáááá áá áá áŤáľáááááłá send message
áŽááśá.
const util = require('util');
const exec = util.promisify(require('child_process').exec);
âŚ
const command = `adm send message ${adamantAddress} "2FA code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);
áááĽááśá˝á á¨ááá á ááŤá ááááľ áá´áá áá áá ááᢠsend
á JS API á¤á°-áá˝áááľ ááľáĽá˘
4 á¨á°á áá á áááá˝
á°á ááá á¨2FA áŽáľ áĽáá˛áŤáľáᣠááááľ á ááĽá ᣠáá áĽáá° á áááŹá˝á ááľá¨á áá á áááľá¨áľ á á°ááŤáŠ ááááśá˝ áá¨ááá áá˝ááᢠá áĽá ááłá, áá Vue áá.
á¨áĽáááźáá áŁá áááľ á°á¨á áá¨áá፠ááłáŤ á áááŹá˝á ááá áŽáľ á áá ááłá áá˝ááá˘
ááá: hab.com