RSA maʻamau ma blockchain

Aia kahi pilikia - paʻakikī ke hoʻopuka i kahi helu maʻamau i kahi pūnaewele decentralized. Aneane pau nā blockchains i ʻike i kēia. ʻOiaʻiʻo, i nā pūnaewele kahi i hilinaʻi ʻole ʻia ma waena o nā mea hoʻohana, ʻo ka hana ʻana i kahi helu maʻamau hiki ʻole ke hoʻonā i nā pilikia he nui.

Ma kēia ʻatikala e haʻi mākou iā ʻoe pehea mākou i hoʻoponopono ai i ka pilikia me ka hoʻohana ʻana i nā pāʻani ma ke ʻano he laʻana. ʻO ka mua o lākou Waves Xmas Tree. No ka hoʻomohala ʻana, pono mākou i kahi mea hoʻomohala helu maʻamau.

RSA maʻamau ma blockchain

I ka wā mua, ua hoʻolālā mākou e hana i kahi helu e pili ana i ka ʻike mai ka blockchain. Eia naʻe, a laila ua maopopo: hiki ke hoʻololi ʻia ka helu, ʻo ia hoʻi, ʻaʻole kūpono ka hopena.

Ua hele mai mākou me kahi hana: e hoʻohana i ka hoʻolālā commit-expand. Manaʻo ke kikowaena i kahi helu mai ka 1 a hiki i ka 5, hoʻohui i ka paʻakai iā ia, a laila hoʻopili i ka hopena me ka hoʻohana ʻana Nā hana Keccak. Ua kau ke kikowaena i ka ʻaelike akamai me ka helu i mālama ʻia ma mua. Ua hoʻololi ʻia ka pāʻani i lalo i ka mea hoʻohana e koho i ka helu huna e ka hash.

Ua kau ka mea pāʻani i ka bet, a ua hoʻouna ke kikowaena i ka helu huna a me ka "paʻakai" i ka ʻaelike akamai. Ma nā'ōlelo maʻalahi, ua hōʻikeʻo ia i nā kāleka. Ma hope o kēlā, nānā ke kikowaena i nā helu a hoʻoholo inā lanakila a nalowale paha ka mea hoʻohana.

Inā ʻaʻole i hoʻouna ka kikowaena i kahi helu a i ʻole "paʻakai" no ka hōʻoia, ua lanakila ka mea hoʻohana. I kēia hihia, no kēlā me kēia pāʻani he mea pono ia e kau i kahi ʻaelike akamai ma mua a hoʻokomo i nā lanakila lanakila i loko. Ua lilo ia i mea kūponoʻole, hoʻopau manawa a me ke kumukūʻai. I kēlā manawa ʻaʻohe hopena palekana ʻē aʻe.

I kēia mau lā, ua manaʻo ka hui Tradisys e hoʻohui i kahi hana i ka protocol Waves rsaVerify(). Nānā ia i ka pono o ka pūlima RSA ma muli o ke kī lehulehu a me ka pilikino. ʻO ka hopena, ua hoʻohui ʻia ka hiʻohiʻona.

Ua kūkulu mākou i ʻekolu pāʻani: Paʻa Paʻa Dice, ʻO Flip Coin и Kaʻa i nā nalu. Hoʻohana kēlā me kēia mea i ka ʻenehana helu random. E noʻonoʻo kākou pehea e hana ai.

RSA maʻamau ma blockchain

E nānā kākou i ka hana ʻana i kahi helu maʻamau me ka hoʻohana ʻana i ka Ride on Waves i laʻana. Hiki ke loaʻa ka ʻaelike akamai maanei.

E hele i ka pākaukau kōmi'ōkuhi a koho Hoʻopili ʻia. E ʻike ʻoe i ke code ʻaelike akamai (aka script).

RSA maʻamau ma blockchain

Aia i loko o ke code aelike akamai kekahi mau hana. Hiki ke hoʻokuʻu ʻia nā mea i hōʻailona ʻia ʻo @Callable me ka hoʻohana ʻana Nā hana hoʻopiʻi. Makemake mākou i ʻelua mau hana: pili и hookaawale ia:

  • pāʻani pāʻani (playerChoice)
  • hana hoʻihoʻi (gameId, rsaSign)

1. Koho ka mea hoʻohana i ka lōʻihi o ka māhele a me ka nui o ka bet.

RSA maʻamau ma blockchain

2. Hoʻokumu ka mea kūʻai i kahi hana pili. No ke kiʻi ma luna pili("50").

3. Hoʻouna ka mea kūʻai aku i kahi hana Invocation i ka helu ʻaelike akamai (broadcast InvocationTx). Loaʻa i ke kālepa ka hana bet ma ke ʻano he kelepona kelepona. ʻO kēia ke kumu o ka Invocation transaction e hoʻomaka i ka hoʻokō ʻana i ka hana bet (koho: String) ma ka ʻaelike akamai.

RSA maʻamau ma blockchain

4. E noʻonoʻo i ka hana pili:

@Callable(i)
func bet (playerChoice) = {
    let newGameNum = IncrementGameNum()
    let gameId = toBase58String(i.transactionId)
    let pmt = extract(i.payment)
    let betNotInWaves = isDefined(pmt.assetId)
    let feeNotInWaves = isDefined(pmt.assetId)
    let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
    let txIdUsed = isDefined(getString(this, gameId))
    if (betNotInWaves)
        then throw ("Bet amount must be in Waves")
        else if (feeNotInWaves)
            then throw ("Transaction's fee must be in Waves")
            else if (txIdUsed)
                then throw ("Passed txId had been used before. Game aborted.")
                else {
                    let playerPubKey58 = toBase58String(i.callerPublicKey)
                    let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
                    ScriptResult(WriteSet(cons(DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), cons(DataEntry(GAMESCOUNTERKEY, newGameNum), cons(DataEntry(gameId, gameDataStr), nil)))), TransferSet(cons(ScriptTransfer(SERVER, COMMISSION, unit), nil)))
                    }
    }

Kākau ka hana i kahi pāʻani hou i ke kūlana o ka ʻaelike akamai. ʻO ia hoʻi:

  • ʻIke kūʻokoʻa no kahi pāʻani hou (ike pāʻani)
  • Mokuʻāina pāʻani = KAU
  • Koho a ka mea pāʻani (ʻāpana 50 lōʻihi)
  • Ki lehulehu
  • Loaʻa nā lanakila (ma muli o ka bet a ka mea pāʻani)

RSA maʻamau ma blockchain

ʻO kēia ke ʻano o kahi moʻolelo ʻikepili i ka blockchain (key-value):

{
    "type": "string",
    "value": "03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229",
    "key": "2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx"
  }

"Kī" (ki) – pāʻani id pāʻani hou. Aia nā ʻikepili i koe ma ka laina o ka māla "waiwai". Mālama ʻia kēia mau mea i loko o ka pā 'Ikepili ʻaelike akamai:

RSA maʻamau ma blockchain

RSA maʻamau ma blockchain

5. "Nānā" ke kikowaena i ka ʻaelike akamai a ʻike i ke kālepa i hoʻouna ʻia (pāʻani hou) me ka hoʻohana ʻana i ka blockchain Api. Ua hoʻopaʻa ʻia ka Game id o ka pāʻani hou i ka blockchain, ʻo ia hoʻi, ʻaʻole hiki ke hoʻololi a hoʻololi hou ʻia

6. Hoʻokumu ke kikowaena i kahi hana withdraw (gameId, rsaSign). No ka laʻana, e like me kēia:

withdraw ("FwsuaaShC6DMWdSWQ5osGWtYkVbTEZrsnxqDbVx5oUpq", "base64:Gy69dKdmXUEsAmUrpoWxDLTQOGj5/qO8COA+QjyPVYTAjxXYvEESJbSiCSBRRCOAliqCWwaS161nWqoTL/TltiIvw3nKyd4RJIBNSIgEWGM1tEtNwwnRwSVHs7ToNfZ2Dvk/GgPUqLFDSjnRQpTHdHUPj9mQ8erWw0r6cJXrzfcagKg3yY/0wJ6AyIrflR35mUCK4cO7KumdvC9Mx0hr/ojlHhN732nuG8ps4CUlRw3CkNjNIajBUlyKQwpBKmmiy3yJa/QM5PLxqdppmfFS9y0sxgSlfLOgZ51xRDYuS8NViOA7c1JssH48ZtDbBT5yqzRJXs3RnmZcMDr/q0x6Bg==")

7. Hoʻouna ke kikowaena i kahi kālepa Invocation i ka ʻaelike akamai (broadcast InvocationTx). Loaʻa i ke kālepa kahi kelepona i ka hana withdraw i kūkulu ʻia (gameId, rsaSign):

RSA maʻamau ma blockchain

Aia ka hana pāʻani id pāʻani hou a me ka hopena o ke kau inoa ʻana o RSA i kahi ʻike kūʻokoʻa me kahi kī pilikino. ʻAʻole i loli ka hopena pūlima.

He aha keʻano o kēia?

Lawe mākou i ka waiwai like (game id) a hoʻopili i ke ʻano hana pūlima RSA iā ia. E loaʻa mau iā mākou ka hopena like. ʻO kēia ka hana o ka RSA algorithm. ʻAʻole hiki ke hoʻohana ʻia ka helu hope, no ka mea ʻaʻole ʻike ʻia ka id pāʻani a me ka hopena o ka noi ʻana iā RSA. He mea ʻole ke koho ʻana i kahi helu.

8. ʻAe ʻo Blockchain i ke kālepa. Holo ia i ka hana withdraw (gameId, rsaSign)

9. I loko o ka hana withdraw, hiki mai ka withdrawal Nā hana GenerateRandInt (gameId, rsaSign). He mea hoʻoheheʻe helu maʻamau kēia

# @return 1 ... 100
func GenerateRandInt (gameId,rsaSign) = {
   	# verify RSA signature to proof random
    let rsaSigValid = rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
    if (rsaSigValid)
        then {
            let rand = (toInt(sha256(rsaSign)) % 100)
            if ((0 > rand))
                then ((-1 * rand) + 1)
                else (rand + 1)
            }
        else throw ("Invalid RSA signature")
    }

palaoa - a aia kahi helu maʻamau.

ʻO ka mua, lawe ʻia ke kaula, ʻo ia ka hopena o ka pūlima RSA pāʻani id kī pilikino (rsaSign). A laila hoʻopili ʻia me SHA-256 (sha256(rsaSign)).

ʻAʻole hiki iā mākou ke wānana i ka hopena o ka pūlima a me ka hashing ma hope. No laila, ʻaʻole hiki ke hoʻololi i ka hoʻokumu ʻana o kahi helu maʻamau. No ka loaʻa ʻana o kahi helu ma kekahi ʻano (no ka laʻana, mai 1 a 100), e hoʻohana i ka hana hoʻololi toInt a me %100 (e like me mod).

I ka hoʻomaka ʻana o ka ʻatikala ua haʻi mākou i ka hana rsaVerify(), hiki iā ʻoe ke nānā i ka pono o kahi pūlima RSA me kahi kī pilikino e kūʻē i kahi pūlima. Eia ka ʻāpana GenerateRandInt(gameId,rsaSign):

rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)

Hāʻawi ʻia ke kī lehulehu RSAPUBLIC a me ke kaula rsaSign i ka hoʻokomo. Nānā ʻia ka pūlima no ka pono. Hoʻokumu ʻia ka helu inā kūleʻa ka māka. A i ʻole, manaʻo ka ʻōnaehana ʻaʻole kūpono ka pūlima (Invalid RSA signature).

Pono ke kikowaena e kau inoa i ka id pāʻani me kahi kī pilikino a hoʻouna i kahi pūlima Rsa kūpono i loko o 2880 poloka. Hoʻonohonoho ʻia ka ʻāpana i ka wā e kau ana i ka ʻaelike akamai. Inā ʻaʻohe mea i loaʻa i loko o ka manawa i hāʻawi ʻia, lanakila ka mea hoʻohana. I kēia hihia, pono e hoʻouna ʻia ka makana i kāu helu wahi iā ʻoe iho. ʻIke ʻia he "ʻaʻole pono i ka server ke hoʻopunipuni", no ka mea e alakaʻi ana kēia i ka poho. Aia ma lalo kahi laʻana.

RSA maʻamau ma blockchain

Ke pāʻani nei ka mea hoʻohana Paʻa Paʻa Dice. Ua koho au i 2 o na aoao 6 o ka pahupahu, he 14 NA WAVE ka pili. Inā ʻaʻole hoʻouna ke kikowaena i kahi pūlima RSA kūpono i ka ʻaelike akamai i loko o ka manawa i ʻōlelo ʻia (2880 poloka), e lawe ka mea hoʻohana i 34.44 WAVES.

No ka hana ʻana i nā helu i nā pāʻani, hoʻohana mākou i kahi oracle - kahi ʻōnaehana waho, non-blockchain. Hana ke kikowaena i kahi pūlima RSA o ka id pāʻani. Nānā ka ʻaelike akamai i ka pono o ka pūlima a hoʻoholo i ka mea lanakila. Inā ʻaʻole hoʻouna ke kikowaena i kekahi mea, a laila lanakila ʻokoʻa ka mea hoʻohana.

He ʻano hanauna ʻoiaʻiʻo kēia, no ka mea, ʻaʻole hiki i ka manipulation ke ʻenehana. Hana nā pāʻani Tradisys āpau ma muli o ka algorithm i wehewehe ʻia. ʻO kēia ka hana o nā pāʻani blockchain. ʻO nā mea a pau i maopopo a hiki ke hōʻoia. ʻAʻohe analogues o ia ʻōnaehana i kekahi blockchain ʻē aʻe. ʻO kēia kahi koho kūpono.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka