ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

ಸಮಸ್ಯೆ ಇದೆ - ವಿಕೇಂದ್ರೀಕೃತ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯನ್ನು ಸೃಷ್ಟಿಸುವುದು ಕಷ್ಟ. ಬಹುತೇಕ ಎಲ್ಲಾ ಬ್ಲಾಕ್‌ಚೈನ್‌ಗಳು ಈಗಾಗಲೇ ಇದನ್ನು ಎದುರಿಸಿವೆ. ವಾಸ್ತವವಾಗಿ, ಬಳಕೆದಾರರ ನಡುವೆ ಯಾವುದೇ ನಂಬಿಕೆಯಿಲ್ಲದ ನೆಟ್‌ವರ್ಕ್‌ಗಳಲ್ಲಿ, ನಿರಾಕರಿಸಲಾಗದ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯನ್ನು ರಚಿಸುವುದು ಅನೇಕ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುತ್ತದೆ.

ಆಟಗಳನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ನಾವು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತಿದ್ದೇವೆ ಎಂಬುದನ್ನು ಈ ಲೇಖನದಲ್ಲಿ ನಾವು ನಿಮಗೆ ಹೇಳುತ್ತೇವೆ. ಅವುಗಳಲ್ಲಿ ಮೊದಲನೆಯದು ಅಲೆಗಳ ಕ್ರಿಸ್ಮಸ್ ಮರ. ಅಭಿವೃದ್ಧಿಗಾಗಿ, ನಮಗೆ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯ ಜನರೇಟರ್ ಅಗತ್ಯವಿದೆ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

ಆರಂಭದಲ್ಲಿ, ನಾವು ಬ್ಲಾಕ್‌ಚೈನ್‌ನಿಂದ ಮಾಹಿತಿಯನ್ನು ಆಧರಿಸಿ ಸಂಖ್ಯೆಯನ್ನು ರಚಿಸಲು ಯೋಜಿಸಿದ್ದೇವೆ. ಆದಾಗ್ಯೂ, ನಂತರ ಅದು ಸ್ಪಷ್ಟವಾಯಿತು: ಸಂಖ್ಯೆಯನ್ನು ಕುಶಲತೆಯಿಂದ ಮಾಡಬಹುದು, ಅಂದರೆ ಪರಿಹಾರವು ಸೂಕ್ತವಲ್ಲ.

ನಾವು ಪರಿಹಾರದೊಂದಿಗೆ ಬಂದಿದ್ದೇವೆ: ಕಮಿಟ್-ವಿಸ್ತರಣೆ ಯೋಜನೆಯನ್ನು ಬಳಸಿ. ಸರ್ವರ್ 1 ರಿಂದ 5 ರವರೆಗಿನ ಸಂಖ್ಯೆಯನ್ನು ಊಹಿಸಿದೆ, ಅದಕ್ಕೆ ಉಪ್ಪನ್ನು ಸೇರಿಸಿ, ನಂತರ ಫಲಿತಾಂಶವನ್ನು ಹ್ಯಾಶ್ ಮಾಡಿದೆ ಕೆಕಾಕ್ ಕಾರ್ಯಗಳು. ಸರ್ವರ್ ಈಗಾಗಲೇ ಉಳಿಸಿದ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದವನ್ನು ಮುಂಚಿತವಾಗಿ ನಿಯೋಜಿಸಿದೆ. ಹ್ಯಾಶ್‌ನಿಂದ ಮರೆಮಾಡಲ್ಪಟ್ಟ ಸಂಖ್ಯೆಯನ್ನು ಊಹಿಸುವ ಬಳಕೆದಾರರಿಗೆ ಆಟವು ಕುದಿಯುತ್ತದೆ ಎಂದು ಅದು ತಿರುಗುತ್ತದೆ.

ಆಟಗಾರನು ಪಂತವನ್ನು ಇರಿಸಿದನು, ಮತ್ತು ಸರ್ವರ್ ಗುಪ್ತ ಸಂಖ್ಯೆ ಮತ್ತು "ಉಪ್ಪು" ಅನ್ನು ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದಕ್ಕೆ ಕಳುಹಿಸಿದನು. ಸರಳವಾಗಿ ಹೇಳುವುದಾದರೆ, ಅವರು ಕಾರ್ಡ್‌ಗಳನ್ನು ಬಹಿರಂಗಪಡಿಸಿದರು. ಅದರ ನಂತರ, ಸರ್ವರ್ ಸಂಖ್ಯೆಗಳನ್ನು ಪರಿಶೀಲಿಸಿತು ಮತ್ತು ಬಳಕೆದಾರರು ಗೆದ್ದಿದ್ದಾರೆಯೇ ಅಥವಾ ಕಳೆದುಕೊಂಡಿದ್ದಾರೆಯೇ ಎಂದು ನಿರ್ಧರಿಸಿದರು.

ಪರಿಶೀಲನೆಗಾಗಿ ಸರ್ವರ್ ಸಂಖ್ಯೆ ಅಥವಾ "ಉಪ್ಪು" ಕಳುಹಿಸದಿದ್ದರೆ, ಬಳಕೆದಾರರು ಗೆದ್ದಿದ್ದಾರೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಪ್ರತಿ ಆಟಕ್ಕೂ ಮುಂಚಿತವಾಗಿ ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದವನ್ನು ನಿಯೋಜಿಸಲು ಮತ್ತು ಅದರಲ್ಲಿ ಸಂಭಾವ್ಯ ಗೆಲುವುಗಳನ್ನು ಸೇರಿಸುವುದು ಅಗತ್ಯವಾಗಿತ್ತು. ಇದು ಅನಾನುಕೂಲ, ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುವ ಮತ್ತು ದುಬಾರಿಯಾಗಿದೆ. ಆ ಸಮಯದಲ್ಲಿ ಬೇರೆ ಯಾವುದೇ ಸುರಕ್ಷಿತ ಪರಿಹಾರ ಇರಲಿಲ್ಲ.

ಇತ್ತೀಚೆಗೆ, Tradisys ತಂಡವು ವೇವ್ಸ್ ಪ್ರೋಟೋಕಾಲ್‌ಗೆ ಕಾರ್ಯವನ್ನು ಸೇರಿಸಲು ಪ್ರಸ್ತಾಪಿಸಿದೆ rsaVerify(). ಇದು ಸಾರ್ವಜನಿಕ ಮತ್ತು ಖಾಸಗಿ ಕೀಲಿಯನ್ನು ಆಧರಿಸಿ RSA ಸಹಿಯ ಸಿಂಧುತ್ವವನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಪರಿಣಾಮವಾಗಿ, ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.

ನಾವು ಮೂರು ಆಟಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಿದ್ದೇವೆ: ರೋಲರ್ ಹೇಳುತ್ತಾರೆ, ನಾಣ್ಯ ಫ್ಲಿಪ್ и ಅಲೆಗಳ ಮೇಲೆ ಸವಾರಿ ಮಾಡಿ. ಪ್ರತಿಯೊಂದೂ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯ ತಂತ್ರಜ್ಞಾನವನ್ನು ಅಳವಡಿಸುತ್ತದೆ. ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡೋಣ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

ರೈಡ್ ಆನ್ ವೇವ್ಸ್ ಅನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯನ್ನು ರಚಿಸುವುದನ್ನು ನೋಡೋಣ. ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದವನ್ನು ಕಾಣಬಹುದು ಇಲ್ಲಿ.

ಟ್ಯಾಬ್‌ಗೆ ಹೋಗಿ ಸ್ಕ್ರಿಪ್ಟ್ ಮತ್ತು ಆಯ್ಕೆ ಡಿಕಂಪೈಲ್ ಮಾಡಲಾಗಿದೆ. ನೀವು ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದ ಕೋಡ್ (ಅಕಾ ಸ್ಕ್ರಿಪ್ಟ್) ಅನ್ನು ನೋಡುತ್ತೀರಿ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದದ ಕೋಡ್ ಕಾರ್ಯಗಳ ಗುಂಪನ್ನು ಒಳಗೊಂಡಿದೆ. @Callable ಎಂದು ಗುರುತಿಸಲಾದವುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರಾರಂಭಿಸಬಹುದು ಆಹ್ವಾನ ವ್ಯವಹಾರಗಳು. ನಾವು ಎರಡು ಕಾರ್ಯಗಳಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದೇವೆ: ಬೆಟ್ и ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ:

  • ಫಂಕ್ ಬೆಟ್ (ಪ್ಲೇಯರ್ ಚಾಯ್ಸ್)
  • ಫಂಕ್ ಹಿಂತೆಗೆದುಕೊಳ್ಳುವಿಕೆ (ಗೇಮ್ಐಡಿ, ಆರ್ಎಸ್ಎಸೈನ್)

1. ಬಳಕೆದಾರರು ವಿಭಾಗದ ಉದ್ದ ಮತ್ತು ಬೆಟ್ ಗಾತ್ರವನ್ನು ಆಯ್ಕೆ ಮಾಡುತ್ತಾರೆ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

2. ಕ್ಲೈಂಟ್ ಒಂದು ಬೆಟ್ ಕಾರ್ಯವನ್ನು ರಚಿಸುತ್ತದೆ. ಮೇಲಿನ ಚಿತ್ರಕ್ಕಾಗಿ ಅದು ಇರುತ್ತದೆ ಬಾಜಿ ("50").

3. ಕ್ಲೈಂಟ್ ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದದ ವಿಳಾಸಕ್ಕೆ (ಪ್ರಸಾರ InvocationTx) ಆಹ್ವಾನ ವ್ಯವಹಾರವನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ವಹಿವಾಟು ಬೆಟ್ ಕಾರ್ಯವನ್ನು ಕರೆ ಪ್ಯಾರಾಮೀಟರ್‌ನಂತೆ ಒಳಗೊಂಡಿದೆ. ಇದರರ್ಥ ಆಹ್ವಾನ ವ್ಯವಹಾರವು ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದದ ಮೇಲೆ ಬೆಟ್ ಕಾರ್ಯವನ್ನು (ಆಯ್ಕೆ: ಸ್ಟ್ರಿಂಗ್) ಕಾರ್ಯಗತಗೊಳಿಸಲು ಪ್ರಚೋದಿಸುತ್ತದೆ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

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 ಯಾದೃಚ್ಛಿಕ

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿನ ಡೇಟಾ ದಾಖಲೆಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ (ಕೀ-ಮೌಲ್ಯ):

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

"ಕೀ" (ಕೀಲಿ) - ಆಟದ ಐಡಿ ಹೊಸ ಆಟ. ಉಳಿದ ಡೇಟಾವನ್ನು "ಮೌಲ್ಯ" ಕ್ಷೇತ್ರದ ಸಾಲಿನಲ್ಲಿ ಒಳಗೊಂಡಿರುತ್ತದೆ. ಈ ನಮೂದುಗಳನ್ನು ಟ್ಯಾಬ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ ಡೇಟಾ ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದ:

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

5. ಸರ್ವರ್ ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದವನ್ನು "ನೋಡುತ್ತದೆ" ಮತ್ತು ಬ್ಲಾಕ್ಚೈನ್ Api ಅನ್ನು ಬಳಸಿಕೊಂಡು ಕಳುಹಿಸಿದ ವಹಿವಾಟನ್ನು (ಹೊಸ ಆಟ) ಕಂಡುಕೊಳ್ಳುತ್ತದೆ. ಹೊಸ ಆಟದ ಆಟದ ಐಡಿ ಈಗಾಗಲೇ ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ರೆಕಾರ್ಡ್ ಆಗಿದೆ, ಅಂದರೆ ಅದನ್ನು ಇನ್ನು ಮುಂದೆ ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ ಅಥವಾ ಪ್ರಭಾವಿಸಲಾಗುವುದಿಲ್ಲ

6. ಸರ್ವರ್ ಹಿಂತೆಗೆದುಕೊಳ್ಳುವ ಕಾರ್ಯವನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ (ಗೇಮ್ಐಡಿ, ಆರ್ಎಸ್ಎಸೈನ್). ಉದಾಹರಣೆಗೆ, ಈ ರೀತಿ:

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

7. ಸರ್ವರ್ ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದಕ್ಕೆ ಆಹ್ವಾನ ವ್ಯವಹಾರವನ್ನು ಕಳುಹಿಸುತ್ತದೆ (ಪ್ರಸಾರ InvocationTx). ವಹಿವಾಟು ರೂಪುಗೊಂಡ ಹಿಂತೆಗೆದುಕೊಳ್ಳುವ ಕಾರ್ಯಕ್ಕೆ ಕರೆಯನ್ನು ಒಳಗೊಂಡಿದೆ (ಗೇಮ್‌ಐಡಿ, ಆರ್‌ಎಸ್‌ಎಸೈನ್):

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

ಕಾರ್ಯವು ಒಳಗೊಂಡಿದೆ ಆಟದ ಐಡಿ ಹೊಸ ಆಟ ಮತ್ತು ಖಾಸಗಿ ಕೀಲಿಯೊಂದಿಗೆ ಅನನ್ಯ ಗುರುತಿಸುವಿಕೆಯ RSA ಸಹಿ ಫಲಿತಾಂಶ. ಸಹಿ ಫಲಿತಾಂಶವು ಬದಲಾಗಿಲ್ಲ.

ಇದರ ಅರ್ಥವೇನು?

ನಾವು ಅದೇ ಮೌಲ್ಯವನ್ನು (ಗೇಮ್ ಐಡಿ) ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ ಮತ್ತು ಅದಕ್ಕೆ RSA ಸಹಿ ವಿಧಾನವನ್ನು ಅನ್ವಯಿಸುತ್ತೇವೆ. ನಾವು ಯಾವಾಗಲೂ ಅದೇ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯುತ್ತೇವೆ. RSA ಅಲ್ಗಾರಿದಮ್ ಈ ರೀತಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಆಟದ ಐಡಿ ಮತ್ತು RSA ಅನ್ನು ಅನ್ವಯಿಸುವ ಫಲಿತಾಂಶವು ತಿಳಿದಿಲ್ಲವಾದ್ದರಿಂದ ಅಂತಿಮ ಸಂಖ್ಯೆಯನ್ನು ಕುಶಲತೆಯಿಂದ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಸಂಖ್ಯೆಯನ್ನು ಆರಿಸುವುದು ಸಹ ಅರ್ಥಹೀನವಾಗಿದೆ.

8. Blockchain ವಹಿವಾಟನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ. ಇದು ಹಿಂತೆಗೆದುಕೊಳ್ಳುವ ಕಾರ್ಯವನ್ನು ನಡೆಸುತ್ತದೆ (ಗೇಮ್ಐಡಿ, ಆರ್ಎಸ್ಎಸೈನ್)

9. ಹಿಂತೆಗೆದುಕೊಳ್ಳುವ ಕಾರ್ಯದ ಒಳಗೆ, ವಾಪಸಾತಿ ಸಂಭವಿಸುತ್ತದೆ ರಾಂಡ್ಇಂಟ್ ಕಾರ್ಯಗಳನ್ನು ರಚಿಸಿ (ಗೇಮ್ಐಡಿ, ಆರ್ಎಸ್ಎಸೈನ್). ಇದು ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯ ಜನರೇಟರ್ ಆಗಿದೆ

# @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 ಸಹಿಯ ಫಲಿತಾಂಶವಾಗಿದೆ ಆಟದ ಐಡಿ ಖಾಸಗಿ ಕೀ (rsaSign) ನಂತರ SHA-256 (sha256(rsaSign)).

ಸಹಿ ಮತ್ತು ನಂತರದ ಹ್ಯಾಶಿಂಗ್‌ನ ಫಲಿತಾಂಶವನ್ನು ನಾವು ಊಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಆದ್ದರಿಂದ, ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆಯ ಪೀಳಿಗೆಯ ಮೇಲೆ ಪ್ರಭಾವ ಬೀರುವುದು ಅಸಾಧ್ಯ. ನಿರ್ದಿಷ್ಟ ಶ್ರೇಣಿಯಲ್ಲಿ ಸಂಖ್ಯೆಯನ್ನು ಪಡೆಯಲು (ಉದಾಹರಣೆಗೆ, 1 ರಿಂದ 100 ವರೆಗೆ), toInt ಪರಿವರ್ತನೆ ಕಾರ್ಯವನ್ನು ಮತ್ತು % 100 (ಇದಕ್ಕೆ ಹೋಲುತ್ತದೆ ವಿರುದ್ಧ).

ಲೇಖನದ ಆರಂಭದಲ್ಲಿ ನಾವು ಕಾರ್ಯವನ್ನು ಉಲ್ಲೇಖಿಸಿದ್ದೇವೆ rsaVerify(), ಇದು ಸಾರ್ವಜನಿಕ ಒಂದರ ವಿರುದ್ಧ ಖಾಸಗಿ ಕೀಲಿಯನ್ನು ಬಳಸಿಕೊಂಡು RSA ಸಹಿಯ ಸಿಂಧುತ್ವವನ್ನು ಪರಿಶೀಲಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. GenerateRandInt(gameId,rsaSign) ಭಾಗ ಇಲ್ಲಿದೆ:

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

ಸಾರ್ವಜನಿಕ ಕೀ RSAPUBLIC ಮತ್ತು rsaSign ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಇನ್‌ಪುಟ್‌ಗೆ ರವಾನಿಸಲಾಗುತ್ತದೆ. ಸಿಂಧುತ್ವಕ್ಕಾಗಿ ಸಹಿಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗಿದೆ. ಚೆಕ್ ಯಶಸ್ವಿಯಾದರೆ ಸಂಖ್ಯೆಯನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ. ಇಲ್ಲದಿದ್ದರೆ, ಸಹಿ ಮಾನ್ಯವಾಗಿಲ್ಲ ಎಂದು ಸಿಸ್ಟಮ್ ಪರಿಗಣಿಸುತ್ತದೆ (ಅಮಾನ್ಯ RSA ಸಹಿ).

ಸರ್ವರ್ ಆಟದ ಐಡಿಗೆ ಖಾಸಗಿ ಕೀಲಿಯೊಂದಿಗೆ ಸಹಿ ಮಾಡಬೇಕು ಮತ್ತು 2880 ಬ್ಲಾಕ್‌ಗಳ ಒಳಗೆ ಮಾನ್ಯವಾದ Rsa ಸಹಿಯನ್ನು ಕಳುಹಿಸಬೇಕು. ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದವನ್ನು ನಿಯೋಜಿಸುವಾಗ ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ. ನಿಗದಿತ ಸಮಯದಲ್ಲಿ ಏನೂ ಸಂಭವಿಸದಿದ್ದರೆ, ಬಳಕೆದಾರರು ಗೆಲ್ಲುತ್ತಾರೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಬಹುಮಾನವನ್ನು ನಿಮ್ಮ ವಿಳಾಸಕ್ಕೆ ಕಳುಹಿಸಬೇಕು. ಇದು "ಮೋಸ ಮಾಡಲು ಸರ್ವರ್ಗೆ ಲಾಭದಾಯಕವಲ್ಲ" ಎಂದು ಅದು ತಿರುಗುತ್ತದೆ, ಏಕೆಂದರೆ ಇದು ನಷ್ಟಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ. ಕೆಳಗೆ ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ RSA ಯಾದೃಚ್ಛಿಕ

ಬಳಕೆದಾರರು ಆಡುತ್ತಿದ್ದಾರೆ ರೋಲರ್ ಹೇಳುತ್ತಾರೆ. ನಾನು ಘನದ 2 ಬದಿಗಳಲ್ಲಿ 6 ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ್ದೇನೆ, ಪಂತವು 14 ಅಲೆಗಳು. ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಸಮಯದೊಳಗೆ (2880 ಬ್ಲಾಕ್‌ಗಳು) ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದಕ್ಕೆ ಸರ್ವರ್ ಮಾನ್ಯವಾದ RSA ಸಹಿಯನ್ನು ಕಳುಹಿಸದಿದ್ದರೆ, ಬಳಕೆದಾರರು 34.44 ವೇವ್‌ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತಾರೆ.

ಆಟಗಳಲ್ಲಿ ಸಂಖ್ಯೆಗಳನ್ನು ರಚಿಸಲು, ನಾವು ಒರಾಕಲ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ - ಬಾಹ್ಯ, ಬ್ಲಾಕ್‌ಚೈನ್ ಅಲ್ಲದ ವ್ಯವಸ್ಥೆ. ಸರ್ವರ್ ಆಟದ ಐಡಿಯ RSA ಸಹಿಯನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಸ್ಮಾರ್ಟ್ ಒಪ್ಪಂದವು ಸಹಿಯ ಸಿಂಧುತ್ವವನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ವಿಜೇತರನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಸರ್ವರ್ ಏನನ್ನೂ ಕಳುಹಿಸದಿದ್ದರೆ, ಬಳಕೆದಾರರು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಗೆಲ್ಲುತ್ತಾರೆ.

ಇದು ಪ್ರಾಮಾಣಿಕ ಪೀಳಿಗೆಯ ವಿಧಾನವಾಗಿದೆ, ಏಕೆಂದರೆ ಕುಶಲತೆಯು ತಾಂತ್ರಿಕವಾಗಿ ಅಸಾಧ್ಯವಾಗಿದೆ. ಎಲ್ಲಾ Tradisys ಆಟಗಳು ವಿವರಿಸಿದ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಆಧರಿಸಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಬ್ಲಾಕ್‌ಚೈನ್ ಆಟಗಳು ಈ ರೀತಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಎಲ್ಲವೂ ಪಾರದರ್ಶಕ ಮತ್ತು ಪರಿಶೀಲಿಸಬಹುದಾಗಿದೆ. ಯಾವುದೇ ಇತರ ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ಅಂತಹ ವ್ಯವಸ್ಥೆಯ ಯಾವುದೇ ಸಾದೃಶ್ಯಗಳಿಲ್ಲ. ಇದು ನ್ಯಾಯೋಚಿತ ಯಾದೃಚ್ಛಿಕವಾಗಿದೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ