RSA тасодуфӣ дар blockchain

Мушкилот вуҷуд дорад - тавлиди рақами тасодуфӣ дар шабакаи ғайримарказӣ мушкил аст. Қариб ҳамаи blockchainҳо аллакай бо ин дучор шудаанд. Дар ҳақиқат, дар шабакаҳое, ки байни корбарон эътимод вуҷуд надорад, эҷоди рақами тасодуфии раднашаванда мушкилоти зиёдеро ҳал мекунад.

Дар ин мақола мо ба шумо мегӯям, ки чӣ гуна мо метавонем мушкилотро бо истифода аз бозиҳо ҳамчун намуна ҳал кунем. Аввалинашон буд Мавҷҳо дарахти Xmas. Барои рушд ба мо генератори рақамҳои тасодуфӣ лозим буд.

RSA тасодуфӣ дар blockchain

Дар аввал, мо нақша доштем, ки рақамеро дар асоси маълумот аз blockchain тавлид кунем. Аммо, баъд маълум шуд: рақамро метавон идора кард, ки ин маънои онро дорад, ки ҳалли мувофиқ нест.

Мо як роҳи ҳалли худро пайдо кардем: схемаи commit-expand -ро истифода баред. Сервер рақами аз 1 то 5-ро тахмин кард, ба он намак илова кард ва сипас бо истифода аз натиҷа натиҷаро ҳаш кард Функсияҳои Keccak. Сервер шартномаи оқилонаро бо рақами аллакай захирашуда пешакӣ ҷойгир кард. Маълум мешавад, ки бозӣ ба корбар тахмин мезанад, ки рақами аз ҷониби ҳаш пинҳоншуда пинҳон карда мешавад.

Бозингар шарт гузошт ва сервер рақами пинҳон ва "намак" -ро ба шартномаи интеллектуалӣ фиристод. Ба ибораи оддӣ, ӯ кортҳоро ошкор кард. Пас аз он сервер рақамҳоро тафтиш кард ва қарор кард, ки корбар бурд мекунад ё бохт.

Агар сервер рақам ё "намак"-ро барои тасдиқ нафиристод, корбар ғолиб омад. Дар ин ҳолат, барои ҳар як бозӣ лозим буд, ки шартномаи оқилонаро пешакӣ ҷойгир кард ва бурди эҳтимолиро дар он дохил кард. Маълум шуд, ки он номувофиқ, вақт ва қимат аст. Дар он вақт роҳи дигари бехатар вуҷуд надошт.

Ба наздикӣ, дастаи Tradisys пешниҳод кард, ки ба протоколи Waves функсия илова карда шавад rsaVerify(). Он эътибори имзои RSA-ро дар асоси калиди ҷамъиятӣ ва хусусӣ тафтиш мекунад. Дар натиҷа, хусусият илова карда шуд.

Мо се бозӣ таҳия кардем: Ролики зард, Монетное флип и Савор бар мавҷҳо. Ҳар яке технологияи рақамҳои тасодуфиро амалӣ мекунад. Биёед бифаҳмем, ки он чӣ гуна кор мекунад.

RSA тасодуфӣ дар blockchain

Биёед ба тавлиди рақами тасодуфӣ бо истифода аз Ride on Waves ҳамчун мисол назар кунем. Шартномаи интеллектуалиро ёфтан мумкин аст дар ин ҷо.

Ба ҷадвал гузаред барномаи саҳнавӣ ва интихоб кунед Декомпиляция. Шумо рамзи шартномаи интеллектуалиро хоҳед дид (ака скрипт).

RSA тасодуфӣ дар blockchain

Рамзи шартномаи интеллектуалӣ дорои маҷмӯи вазифаҳо мебошад. Онҳое, ки ҳамчун @Callable қайд шудаанд, метавонанд бо истифода аз он оғоз шаванд Амалиётҳои даъват. Мо ба ду функсия таваҷҷӯҳ дорем: гарав и бозпас:

  • bet func (playerChoice)
  • хуруҷи func(gameId,rsaSign)

1. Истифодабаранда дарозии сегмент ва андозаи шартро интихоб мекунад.

RSA тасодуфӣ дар blockchain

2. Муштарӣ функсияи шартгузориро эҷод мекунад. Барои тасвири боло ин хоҳад буд шарт ("50").

3. Муштарӣ амалиёти даъватро ба суроғаи шартномаи интеллектуалӣ мефиристад (пахши InvocationTx). Муомилот дорои функсияи шартгузорӣ ҳамчун параметри занг. Ин маънои онро дорад, ки транзаксияи Даъват иҷрои вазифаи шартгузориро (интихоб: Сатр) дар шартномаи интеллектуалӣ бармеангезад.

RSA тасодуфӣ дар blockchain

4. Функсияи шартгузориро баррасӣ кунед:

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

Функсия бозии навро ба ҳолати шартномаи интеллектуалӣ менависад. Аз ҷумла:

  • Идентификатори беназир барои бозии нав (идентификатсияи бозӣ)
  • Ҳолати бозӣ = ПЕШСОД
  • Интихоби бозигар (дарозии сегмент 50)
  • Калиди ҷамъиятӣ
  • Бурдҳои эҳтимолӣ (вобаста ба шарти бозингар)

RSA тасодуфӣ дар blockchain

Ин аст он чизе ки сабти маълумот дар blockchain монанд аст (арзиши калидӣ):

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

"Калид" (калид) - ID бозӣ бозии нав. Маълумоти боқимонда дар сатри майдони "арзиш" мавҷуд аст. Ин сабтҳо дар ҷадвал нигоҳ дошта мешаванд Маълумот шартномаи интеллектуалӣ:

RSA тасодуфӣ дар blockchain

RSA тасодуфӣ дар blockchain

5. Сервер ба шартномаи интеллектуалӣ "нигарад" ва транзаксияи фиристодашударо (бозии нав) бо истифода аз blockchain Api пайдо мекунад. Иди бозии бозии нав аллакай дар blockchain сабт шудааст, ки ин маънои онро дорад, ки онро дигар тағир додан ё таъсир кардан мумкин нест.

6. Сервер функсияи бозпасро тавлид мекунад (gameId, rsaSign). Масалан, ба ин монанд:

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

7. Сервер амалиёти даъватро ба шартномаи интеллектуалӣ мефиристад (пахши InvocationTx). Муомилот дорои занг ба функсияи ташаккулёфтаи бозпас гирифтан аст (gameId, rsaSign):

RSA тасодуфӣ дар blockchain

Функсия дорои ID бозӣ бозии нав ва натиҷаи имзои RSA идентификатори беназир бо калиди хусусӣ. Натиҷаи имзо бетағйир боқӣ мемонад.

Ин чӣ маъно дорад?

Мо ҳамон арзишро (id-и бозӣ) мегирем ва усули имзои RSA-ро ба он татбиқ мекунем. Мо ҳамеша як натиҷа мегирем. Алгоритм RSA ҳамин тавр кор мекунад. Рақами ниҳоиро идора кардан мумкин нест, зеро id бозӣ ва натиҷаи татбиқи RSA маълум нест. Интихоби рақам низ бефоида аст.

8. Blockchain транзаксияро қабул мекунад. Он функсияи бозпасро иҷро мекунад (gameId, rsaSign)

9. Дар дохили функсияи хуруҷ, хуруҷ ба амал меояд Функсияҳои GenerateRandInt (gameId, rsaSign). Ин як генератори рақамҳои тасодуфӣ аст

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

ранд - ва рақами тасодуфӣ вуҷуд дорад.

Аввалан, сатр гирифта мешавад, ки натиҷаи имзои RSA мебошад ID бозӣ калиди хусусӣ (rsaSign). Сипас бо SHA-256 (sha256(rsaSign)).

Мо наметавонем натиҷаи имзо ва ҳашингии минбаъдаро пешгӯӣ кунем. Аз ин рӯ, ба тавлиди рақами тасодуфӣ таъсир расонидан ғайриимкон аст. Барои гирифтани адад дар диапазони муайян (масалан, аз 1 то 100), функсияи табдили toInt ва %100 (монанди MOD).

Дар аввали мақола мо функсияро зикр кардем rsaVerify(), ки ба шумо имкон медиҳад, ки эътибори имзои RSA-ро бо калиди хусусӣ нисбат ба имзои ҷамъиятӣ тафтиш кунед. Ин аст қисми GenerateRandInt(gameId,rsaSign):

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

Калиди оммавии RSAPUBLIC ва сатри rsaSign ба вуруд интиқол дода мешаванд. Имзо барои дурустӣ тафтиш карда мешавад. Рақам тавлид мешавад, агар чек бомуваффақият анҷом дода шавад. Дар акси ҳол, система чунин мешуморад, ки имзо эътибор надорад (имзои RSA беэътибор).

Сервер бояд id-и бозӣ бо калиди хусусӣ имзо гузорад ва имзои Rsa-ро дар доираи 2880 блок фиристад. Параметр ҳангоми ҷойгиркунии шартномаи интеллектуалӣ танзим карда мешавад. Агар дар давоми вақти ҷудошуда ҳеҷ чиз рӯй надиҳад, корбар ғолиб мешавад. Дар ин сурат мукофот бояд худатон ба адреси шумо фиристода шавад. Маълум мешавад, ки "фиреб додан барои сервер фоидаовар нест", зеро ин боиси талафот мегардад. Дар поён як мисол оварда шудааст.

RSA тасодуфӣ дар blockchain

Истифодабаранда бозӣ мекунад Ролики зард. Ман интихоб 2 аз 6 ҷонибҳои мукааб, Бет аст, 14 МАВҶ. Агар сервер дар муддати муайян (2880 блок) имзои дурусти RSA-ро ба шартномаи интеллектуалӣ нафиристад, корбар 34.44 WAVES-ро мегирад.

Барои тавлиди рақамҳо дар бозиҳо, мо oracle - системаи беруна, ғайри блокчейнро истифода мебарем. Сервер имзои RSA-и бозии ID-ро иҷро мекунад. Шартномаи интеллектуалӣ дурустии имзоро тафтиш мекунад ва ғолибро муайян мекунад. Агар сервер чизе нафиристад, корбар ба таври худкор ғолиб мешавад.

Ин усули насли ростқавл аст, зеро манипуляция аз ҷиҳати техникӣ ғайриимкон аст. Ҳама бозиҳои Tradisys дар асоси алгоритми тавсифшуда кор мекунанд. Ҳамин тавр бозиҳои blockchain кор мекунанд. Ҳама чиз шаффоф ва тафтишшаванда аст. Дар ягон blockchain дигар аналоги чунин система вуҷуд надорад. Ин як тасодуфи одилона аст.

Манбаъ: will.com

Илова Эзоҳ