RSA bazuwar kan blockchain

Akwai matsala - yana da wahala a ƙirƙira lambar bazuwar a cikin hanyar sadarwar da aka raba. Kusan duk blockchain sun riga sun ci karo da wannan. Lallai, a cikin cibiyoyin sadarwa inda babu amana tsakanin masu amfani, ƙirƙirar lambar bazuwar da ba za a iya musantawa tana warware matsaloli da yawa.

A cikin wannan labarin mun gaya muku yadda muka gudanar da magance matsalar ta amfani da wasanni a matsayin misali. Na farkonsu shine Bishiyar Xmas Waves. Don haɓakawa, muna buƙatar janareta na lamba bazuwar.

RSA bazuwar kan blockchain

Da farko, mun shirya samar da lamba bisa bayanai daga blockchain. Duk da haka, sannan ya bayyana a fili: ana iya amfani da lambar, wanda ke nufin maganin bai dace ba.

Mun zo tare da tsarin aiki: yi amfani da tsarin ƙaddamarwa. Sabar ta ƙididdige lamba daga 1 zuwa 5, ta ƙara gishiri a ciki, sannan ta yi amfani da sakamakon Ayyukan Keccak. Sabar ɗin ta tura kwangilar wayo tare da lambar da aka rigaya ta ajiye a gaba. Sai ya zama cewa wasan ya gangara zuwa ga mai amfani yana kimanta lambar da zanta ya ɓoye.

Mai kunnawa ya sanya fare, kuma uwar garken ya aika da lambar ɓoye da "gishiri" zuwa kwangilar wayo. A cikin sauki kalmomi, ya bayyana katunan. Bayan haka, uwar garken ya duba lambobin kuma ya yanke shawarar ko mai amfani ya ci nasara ko ya rasa.

Idan uwar garken bai aika lamba ko “gishiri” don tabbatarwa ba, mai amfani ya yi nasara. A wannan yanayin, ga kowane wasa ya zama dole a tura kwangilar wayo a gaba kuma ya haɗa da yuwuwar nasara a ciki. Ya juya ya zama mara dadi, mai cin lokaci da tsada. A lokacin babu wata mafita mai lafiya.

Kwanan nan, ƙungiyar Tradisys ta ba da shawarar ƙara aiki zuwa ƙa'idar Waves rsaVerify(). Yana bincika ingancin sa hannun RSA bisa maɓalli na jama'a da na sirri. A sakamakon haka, an ƙara fasalin.

Mun kirkiro wasanni uku: Dice Roller, Tsabar Kudi и Hawa Akan Waves. Kowannensu yana aiwatar da fasahar lambar bazuwar. Bari mu gano yadda yake aiki.

RSA bazuwar kan blockchain

Bari mu dubi samar da lambar bazuwar ta amfani da Ride on Waves a matsayin misali. Ana iya samun kwangilar wayo a nan.

Jeka tab script kuma zaɓi An rarraba. Za ku ga lambar kwangila mai wayo (aka rubutun).

RSA bazuwar kan blockchain

Lambar kwangilar wayo ta ƙunshi saitin ayyuka. Wadanda aka yiwa alama kamar @Callable ana iya ƙaddamar da su ta amfani da su Kasuwancin kira. Muna sha'awar ayyuka guda biyu: fare и janye:

  • func fare (playerChoice)
  • func janye (gameId, rsaSign)

1. Mai amfani yana zaɓar tsawon sashi da girman fare.

RSA bazuwar kan blockchain

2. Abokin ciniki yana ƙirƙirar aikin fare. Ga hoton da ke sama zai kasance fare ("50").

3. Abokin ciniki ya aika ma'amalar Kira zuwa adireshin kwangila mai wayo (watsawa InvocationTx). Ma'amalar ta ƙunshi aikin fare azaman sigar kira. Wannan yana nufin cewa ma'amalar kiran kira yana haifar da aiwatar da aikin fare (zaɓi: String) akan kwangilar wayo.

RSA bazuwar kan blockchain

4. Yi la'akari da aikin fare:

@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)))
                    }
    }

Aikin yana rubuta sabon wasa zuwa yanayin kwangilar wayo. Wato:

  • Mai ganowa na musamman don sabon wasa (game id)
  • Yanayin wasan = MULKI
  • Zaɓin ɗan wasa (tsawon kashi 50)
  • Maɓallin jama'a
  • Abubuwan da ake iya samun nasara (dangane da fare na ɗan wasan)

RSA bazuwar kan blockchain

Wannan shine yadda rikodin bayanai a cikin blockchain yayi kama (key-darajar):

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

"Makullin" (makullin) - id game sabon wasa. Sauran bayanan suna kunshe a cikin layin "darajar" filin. Ana adana waɗannan shigarwar a cikin shafin data kwangila mai wayo:

RSA bazuwar kan blockchain

RSA bazuwar kan blockchain

5. Sabar ta "duba" kwangilar wayo kuma ta sami ma'amala da aka aika (sabon wasa) ta amfani da blockchain Api. An riga an yi rikodin id game na sabon wasan a cikin blockchain, wanda ke nufin ba za a iya canza shi ko tasiri ba

6. Sabar tana haifar da aikin janyewa (gameId, rsaSign). Misali, kamar haka:

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

7. Sabar tana aika ma'amalar Kira zuwa kwangilar wayo (watsawa InvocationTx). Ma'amalar ta ƙunshi kira zuwa aikin cirewa da aka kafa (gameId, rsaSign):

RSA bazuwar kan blockchain

Aikin ya ƙunshi id game sabon wasa da sakamakon sanya hannu na RSA na musamman mai ganowa tare da maɓalli na sirri. Sakamakon sa hannu bai canza ba.

Mene ne wannan yake nufi?

Muna ɗaukar ƙima ɗaya (idan wasa) kuma muna amfani da hanyar sa hannun RSA zuwa gare ta. Za mu sami sakamako iri ɗaya koyaushe. Wannan shine yadda RSA algorithm ke aiki. Ba za a iya sarrafa lambar ƙarshe ba, tunda ba a san id ɗin wasan da sakamakon yin amfani da RSA ba. Zabar lamba kuma bashi da ma'ana.

8. Blockchain yana karɓar ma'amala. Yana gudanar da aikin janyewa (gameId, rsaSign)

9. A cikin aikin cirewa, cirewa yana faruwa Ayyukan GenerateRandInt (gameId, rsaSign). Wannan janareta ce ta bazuwar lamba

# @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")
    }

Rand - kuma akwai lambar bazuwar.

Da farko, ana ɗaukar kirtani, wanda shine sakamakon sa hannun RSA id game maɓalli na sirri (rsaSign). Sa'an nan kuma hashed da SHA-256 (sha256 (rsaSign)).

Ba za mu iya hasashen sakamakon sa hannun da hashing na gaba ba. Saboda haka, ba shi yiwuwa a yi tasiri ga ƙirƙira lambar bazuwar. Don samun lamba a wani kewayon (misali, daga 1 zuwa 100), yi amfani da aikin jujjuyawar toInt da %100 (mai kama da haka). na zamani).

A farkon labarin mun ambaci aikin rsaVerify(), wanda ke ba ka damar duba ingancin sa hannun RSA ta amfani da maɓalli na sirri akan na jama'a. Ga sashin GenerateRandInt(gameId,rsaSign):

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

Maɓallin jama'a RSAPUBLIC da kirtan rsaSign an wuce zuwa shigarwar. Ana duba sa hannun don inganci. Ana samar da lambar idan cak ɗin ya yi nasara. In ba haka ba, tsarin yana ɗaukar cewa sa hannun ba shi da inganci (Sa hannun RSA mara inganci).

Dole ne uwar garken ya sanya hannu kan id ɗin wasan tare da maɓalli na sirri kuma ya aika sa hannun Rsa mai inganci a cikin tubalan 2880. Ana saita siga lokacin tura kwangilar wayo. Idan babu abin da ya faru a cikin lokacin da aka keɓe, mai amfani ya yi nasara. A wannan yanayin, dole ne a aika kyautar zuwa adireshin ku da kanku. Ya bayyana cewa "ba shi da riba ga uwar garken don yaudara", saboda wannan yana haifar da hasara. A ƙasa akwai misali.

RSA bazuwar kan blockchain

Mai amfani yana wasa Dice Roller. Na zabi 2 daga cikin bangarorin 6 na cube, fare shine 14 WAVES. Idan uwar garken ba ta aika sa hannun RSA mai aiki ba zuwa kwangilar wayo a cikin ƙayyadadden lokacin (2880 tubalan), mai amfani zai ɗauki 34.44 WAVES.

Don samar da lambobi a cikin wasanni, muna amfani da oracle - tsarin waje, wanda ba blockchain ba. Sabar tana yin sa hannun RSA na id wasan. Kwangilar mai wayo tana bincika ingancin sa hannun kuma yana tantance mai nasara. Idan uwar garken ba ta aika komai ba, to mai amfani ya yi nasara ta atomatik.

Wannan hanyar tsara tsara ce ta gaskiya, saboda magudi ba zai yiwu ba a fasaha. Duk wasannin Tradisys suna aiki bisa ga bayanin algorithm. Wannan shine yadda wasannin blockchain ke aiki. Komai a bayyane yake kuma tabbatacce. Babu analogues na irin wannan tsarin a cikin wani blockchain. Wannan bazuwar gaskiya ce.

source: www.habr.com

Add a comment