RSA ืืงืจืื™ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ

ื™ืฉ ื‘ืขื™ื” - ืงืฉื” ืœื™ื™ืฆืจ ืžืกืคืจ ืืงืจืื™ ื‘ืจืฉืช ืžื‘ื•ื–ืจืช. ื›ืžืขื˜ ื›ืœ ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื›ื‘ืจ ื ืชืงืœื• ื‘ื–ื”. ื•ืื›ืŸ, ื‘ืจืฉืชื•ืช ืฉื‘ื”ืŸ ืื™ืŸ ืืžื•ืŸ ื‘ื™ืŸ ืžืฉืชืžืฉื™ื, ื™ืฆื™ืจืช ืžืกืคืจ ืืงืจืื™ ืฉืื™ืŸ ืœื”ื›ื—ื™ืฉื” ืคื•ืชืจืช ื‘ืขื™ื•ืช ืจื‘ื•ืช.

ื‘ืžืืžืจ ื–ื” ืื ื• ืžืกืคืจื™ื ืœื›ื ื›ื™ืฆื“ ื”ืฆืœื—ื ื• ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื‘ืืžืฆืขื•ืช ืžืฉื—ืงื™ื ื›ื“ื•ื’ืžื”. ื”ืจืืฉื•ืŸ ืฉื‘ื”ื ื”ื™ื” ื’ืœื™ื ืขืฅ ื—ื’ ื”ืžื•ืœื“. ืœืฆื•ืจืš ื”ืคื™ืชื•ื—, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืžื—ื•ืœืœ ืžืกืคืจื™ื ืืงืจืื™ื™ื.

RSA ืืงืจืื™ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ

ื‘ืชื—ื™ืœื”, ืชื›ื ื ื• ืœื™ืฆื•ืจ ืžืกืคืจ ื”ืžื‘ื•ืกืก ืขืœ ืžื™ื“ืข ืžื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ. ืขื ื–ืืช, ืื– ื”ืชื‘ืจืจ: ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ื”ืžืกืคืจ, ืžื” ืฉืื•ืžืจ ืฉื”ืคืชืจื•ืŸ ืื™ื ื• ืžืชืื™ื.

ื”ืžืฆืื ื• ืคืชืจื•ืŸ ืœืขืงื™ืคืช ื”ื‘ืขื™ื”: ื”ืฉืชืžืฉ ื‘ืกื›ื™ืžืช commit-expand. ื”ืฉืจืช ื ื™ื—ืฉ ืžืกืคืจ ืž-1 ืขื“ 5, ื”ื•ืกื™ืฃ ืœื• ืžืœื— ื•ืื– ื’ื™ื‘ืฉ ืืช ื”ืชื•ืฆืื” ื‘ืืžืฆืขื•ืช ืคื•ื ืงืฆื™ื•ืช Keccak. ื”ืฉืจืช ืคืจืก ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื ืขื ื”ืžืกืคืจ ืฉื›ื‘ืจ ืฉืžื•ืจ ืžืจืืฉ. ืžืกืชื‘ืจ ืฉื”ืžืฉื—ืง ืžืกืชื›ื ื‘ื›ืš ืฉื”ืžืฉืชืžืฉ ืžื ื—ืฉ ืืช ื”ืžืกืคืจ ืฉืžืกืชื™ืจ ื”-hash.

ื”ืฉื—ืงืŸ ื‘ื™ืฆืข ื”ื™ืžื•ืจ, ื•ื”ืฉืจืช ืฉืœื— ืืช ื”ืžืกืคืจ ื”ื—ื‘ื•ื™ ื•ื”"ืžืœื—" ืœื—ื•ื–ื” ื”ื—ื›ื. ื‘ืžื™ืœื™ื ืคืฉื•ื˜ื•ืช, ื”ื•ื ื—ืฉืฃ ืืช ื”ืงืœืคื™ื. ืœืื—ืจ ืžื›ืŸ, ื”ืฉืจืช ื‘ื“ืง ืืช ื”ืžืกืคืจื™ื ื•ื”ื—ืœื™ื˜ ืื ื”ืžืฉืชืžืฉ ื ื™ืฆื— ืื• ื”ืคืกื™ื“.

ืื ื”ืฉืจืช ืœื ืฉืœื— ืžืกืคืจ ืื• "ืžืœื—" ืœืื™ืžื•ืช, ื”ืžืฉืชืžืฉ ื ื™ืฆื—. ื‘ืžืงืจื” ื–ื”, ืขื‘ื•ืจ ื›ืœ ืžืฉื—ืง ื”ื™ื” ืฆื•ืจืš ืœืคืจื•ืก ื—ื•ื–ื” ื—ื›ื ืžืจืืฉ ื•ืœื›ืœื•ืœ ื‘ื• ื–ื›ื™ื•ืช ืคื•ื˜ื ืฆื™ืืœื™ื•ืช. ื”ืชื‘ืจืจ ืฉื–ื” ืœื ื ื•ื—, ืœื•ืงื— ื–ืžืŸ ื•ื™ืงืจ. ื‘ืื•ืชื” ืชืงื•ืคื” ืœื ื”ื™ื” ืคืชืจื•ืŸ ื‘ื˜ื•ื— ืื—ืจ.

ืœืื—ืจื•ื ื”, ืฆื•ื•ืช Tradisys ื”ืฆื™ืข ืœื”ื•ืกื™ืฃ ืคื•ื ืงืฆื™ื” ืœืคืจื•ื˜ื•ืงื•ืœ Waves rsaVerify(). ื”ื•ื ื‘ื•ื“ืง ืืช ืชืงืคื•ืช ื—ืชื™ืžืช ื”-RSA ื‘ื”ืชื‘ืกืก ืขืœ ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ื•ื”ืคืจื˜ื™. ื›ืชื•ืฆืื” ืžื›ืš, ื”ืชื›ื•ื ื” ื ื•ืกืคื”.

ืคื™ืชื—ื ื• ืฉืœื•ืฉื” ืžืฉื—ืงื™ื: ืื•ืžืจ ืจื•ืœืจ, ื”ืคื•ืš ืžื˜ื‘ืขื•ืช ะธ ืœืจื›ื•ื‘ ืขืœ ื’ืœื™ื. ื›ืœ ืื—ื“ ืžื”ื ืžื™ื™ืฉื ื˜ื›ื ื•ืœื•ื’ื™ื™ืช ืžืกืคืจื™ื ืืงืจืื™ื™ื. ื‘ื•ืื• ื ื‘ื™ืŸ ืื™ืš ื–ื” ืขื•ื‘ื“.

RSA ืืงืจืื™ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื™ืฆื™ืจืช ืžืกืคืจ ืืงืจืื™ ื‘ืืžืฆืขื•ืช Ride on Waves ื›ื“ื•ื’ืžื”. ื ื™ืชืŸ ืœืžืฆื•ื ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื ื›ืืŸ.

ืขื‘ื•ืจ ืœื›ืจื˜ื™ืกื™ื™ื” ืชืกืจื™ื˜ ื•ื‘ื—ืจ ืคื•ืจืง ืงื•ืžืคื™ืœืฆื™ื”. ืชืจืื” ืืช ืงื•ื“ ื”ื—ื•ื–ื” ื”ื—ื›ื (ื”ืžื›ื•ื ื” ื’ื ืกืงืจื™ืคื˜).

RSA ืืงืจืื™ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ

ืงื•ื“ ื”ื—ื•ื–ื” ื”ื—ื›ื ืžื›ื™ืœ ืงื‘ื•ืฆื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช. ืืœื” ื”ืžืกื•ืžื ื™ื ื›-@Callable ื ื™ืชืŸ ืœื”ืคืขื™ืœ ื‘ืืžืฆืขื•ืช ืขืกืงืื•ืช ื”ื–ืžื ื”. ืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ืฉืชื™ ืคื•ื ืงืฆื™ื•ืช: ืœื”ืžืจ ะธ ืœืกื’ืช:

  • ื”ื™ืžื•ืจ func (ื‘ื—ื™ืจืช ืฉื—ืงืŸ)
  • func draw(gameId,rsaSign)

1. ื”ืžืฉืชืžืฉ ื‘ื•ื—ืจ ืืช ืื•ืจืš ื”ืงื˜ืข ื•ืืช ื’ื•ื“ืœ ื”ื”ื™ืžื•ืจ.

RSA ืืงืจืื™ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ

2. ื”ืœืงื•ื— ื™ื•ืฆืจ ืคื•ื ืงืฆื™ื™ืช ื”ื™ืžื•ืจ. ืขื‘ื•ืจ ื”ืชืžื•ื ื” ืœืžืขืœื” ื–ื” ื™ื”ื™ื” bet("50").

3. ื”ืœืงื•ื— ืฉื•ืœื— ืขืกืงืช Invocation ืœื›ืชื•ื‘ืช ื”ื—ื•ื–ื” ื”ื—ื›ื (broadcast InvocationTx). ื”ืขืกืงื” ืžื›ื™ืœื” ืืช ืคื•ื ืงืฆื™ื™ืช ื”ื”ื™ืžื•ืจ ื›ืคืจืžื˜ืจ ืฉื™ื—ื”. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉืขืกืงืช ื”-Invocation ืžืคืขื™ืœื” ืืช ื‘ื™ืฆื•ืข ืคื•ื ืงืฆื™ื™ืช ื”ื”ื™ืžื•ืจ (ื‘ื—ื™ืจื”: String) ื‘ื—ื•ื–ื” ื”ื—ื›ื.

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. ื”ืฉืจืช ื™ื•ืฆืจ ืคื•ื ืงืฆื™ื™ืช ืžืฉื™ื›ื” (gameId, rsaSign). ืœื“ื•ื’ืžื”, ื›ืš:

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

7. ื”ืฉืจืช ืฉื•ืœื— ืขืกืงืช Invocation ืœื—ื•ื–ื” ื”ื—ื›ื (broadcast InvocationTx). ื”ืขืกืงื” ืžื›ื™ืœื” ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื™ืช ื”ืžืฉื™ื›ื” ืฉื ื•ืฆืจื” (gameId, rsaSign):

RSA ืืงืจืื™ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ

ื”ืคื•ื ืงืฆื™ื” ืžื›ื™ืœื” ืžื–ื”ื” ืžืฉื—ืง ืžืฉื—ืง ื—ื“ืฉ ื•ื”ืชื•ืฆืื” ืฉืœ ื—ืชื™ืžืช RSA ืฉืœ ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ ืขื ืžืคืชื— ืคืจื˜ื™. ืชื•ืฆืืช ื”ื—ืชื™ืžื” ืœืœื ืฉื™ื ื•ื™.

ืžื” ื–ื” ืื•ืžืจ?

ืื ื—ื ื• ืœื•ืงื—ื™ื ืืช ืื•ืชื• ืขืจืš (ืžื–ื”ื” ืžืฉื—ืง) ื•ืžื—ื™ืœื™ื ืขืœื™ื• ืืช ืฉื™ื˜ืช ื”ื—ืชื™ืžื” RSA. ืชืžื™ื“ ื ืงื‘ืœ ืืช ืื•ืชื” ืชื•ืฆืื”. ื›ืš ืขื•ื‘ื“ ืืœื’ื•ืจื™ืชื RSA. ืœื ื ื™ืชืŸ ืœืชืžืจืŸ ืืช ื”ืžืกืคืจ ื”ืกื•ืคื™, ืžื›ื™ื•ื•ืŸ ืฉืžื–ื”ื” ื”ืžืฉื—ืง ื•ื”ืชื•ืฆืื” ืฉืœ ื”ื—ืœืช 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 ืžื–ื”ื” ืžืฉื—ืง ืžืคืชื— ืคืจื˜ื™ (rsaSign). ืœืื—ืจ ืžื›ืŸ ื’ื™ื‘ื•ื‘ ืขื SHA-256 (sha256(rsaSign)).

ืื™ื ื ื• ื™ื›ื•ืœื™ื ืœื—ื–ื•ืช ืืช ื”ืชื•ืฆืื” ืฉืœ ื”ื—ืชื™ืžื” ื•ื”-hashing ืฉืœืื—ืจ ืžื›ืŸ. ืœื›ืŸ, ืื™ ืืคืฉืจ ืœื”ืฉืคื™ืข ืขืœ ื™ืฆื™ืจืช ืžืกืคืจ ืืงืจืื™. ื›ื“ื™ ืœืงื‘ืœ ืžืกืคืจ ื‘ื˜ื•ื•ื— ืžืกื•ื™ื (ืœื“ื•ื’ืžื”, ืž-1 ืขื“ 100), ื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื™ืช ื”ื”ืžืจื” toInt ื•ื‘-%100 (ื‘ื“ื•ืžื” ืœ mod).

ื‘ืชื—ื™ืœืช ื”ืžืืžืจ ื”ื–ื›ืจื ื• ืืช ื”ืคื•ื ืงืฆื™ื” rsaVerify(), ื”ืžืืคืฉืจ ืœื‘ื“ื•ืง ืืช ืชืงืคื•ืช ื—ืชื™ืžืช RSA ื‘ืืžืฆืขื•ืช ืžืคืชื— ืคืจื˜ื™ ืžื•ืœ ืžืคืชื— ืฆื™ื‘ื•ืจื™. ื”ื ื” ื”ื—ืœืง GenerateRandInt(gameId,rsaSign):

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

ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ RSAPUBLIC ื•ื”ืžื—ืจื•ื–ืช rsaSign ืžื•ืขื‘ืจื™ื ืœืงืœื˜. ื”ื—ืชื™ืžื” ื ื‘ื“ืงืช ืœื’ื‘ื™ ืชื•ืงืฃ. ื”ืžืกืคืจ ื ื•ืฆืจ ืื ื”ื‘ื“ื™ืงื” ื”ืฆืœื™ื—ื”. ืื—ืจืช, ื”ืžืขืจื›ืช ืžื—ืฉื™ื‘ื” ืฉื”ื—ืชื™ืžื” ืื™ื ื” ื—ื•ืงื™ืช (ื—ืชื™ืžืช RSA ืœื ื—ื•ืงื™ืช).

ืขืœ ื”ืฉืจืช ืœื—ืชื•ื ืขืœ ืžื–ื”ื” ื”ืžืฉื—ืง ืขื ืžืคืชื— ืคืจื˜ื™ ื•ืœืฉืœื•ื— ื—ืชื™ืžืช Rsa ื—ื•ืงื™ืช ื‘ืชื•ืš 2880 ื‘ืœื•ืงื™ื. ื”ืคืจืžื˜ืจ ืžื•ื’ื“ืจ ื‘ืขืช ืคืจื™ืกืช ื”ื—ื•ื–ื” ื”ื—ื›ื. ืื ืฉื•ื ื“ื‘ืจ ืœื ืงื•ืจื” ื‘ื–ืžืŸ ื”ืžื•ืงืฆื‘, ื”ืžืฉืชืžืฉ ืžื ืฆื—. ื‘ืžืงืจื” ื–ื”, ื™ืฉ ืœืฉืœื•ื— ืืช ื”ืคืจืก ืœื›ืชื•ื‘ืช ืฉืœืš ื‘ืขืฆืžืš. ืžืกืชื‘ืจ ืฉ"ืœื ืžืฉืชืœื ืœืฉืจืช ืœืจืžื•ืช", ื›ื™ ื–ื” ืžื•ื‘ื™ืœ ืœื”ืคืกื“. ืœื”ืœืŸ ื“ื•ื’ืžื”.

RSA ืืงืจืื™ ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ

ื”ืžืฉืชืžืฉ ืžืฉื—ืง ืื•ืžืจ ืจื•ืœืจ. ื‘ื—ืจืชื™ 2 ืžืชื•ืš 6 ื”ืฆื“ื“ื™ื ืฉืœ ื”ืงื•ื‘ื™ื”, ื”ื”ื™ืžื•ืจ ื”ื•ื 14 WAVES. ืื ื”ืฉืจืช ืœื ื™ืฉืœื— ื—ืชื™ืžืช RSA ื—ื•ืงื™ืช ืœื—ื•ื–ื” ื”ื—ื›ื ื‘ืชื•ืš ื”ื–ืžืŸ ืฉืฆื•ื™ืŸ (2880 ื‘ืœื•ืงื™ื), ื”ืžืฉืชืžืฉ ื™ื™ืงื— 34.44 WAVES.

ื›ื“ื™ ืœื™ืฆื•ืจ ืžืกืคืจื™ื ื‘ืžืฉื—ืงื™ื, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืื•ืจืงืœ - ืžืขืจื›ืช ื—ื™ืฆื•ื ื™ืช ืฉืื™ื ื” ื‘ืœื•ืงืฆ'ื™ื™ืŸ. ื”ืฉืจืช ืžื‘ืฆืข ื—ืชื™ืžืช RSA ืฉืœ ืžื–ื”ื” ื”ืžืฉื—ืง. ื”ื—ื•ื–ื” ื”ื—ื›ื ื‘ื•ื“ืง ืืช ืชื•ืงืฃ ื”ื—ืชื™ืžื” ื•ืงื•ื‘ืข ืืช ื”ื–ื•ื›ื”. ืื ื”ืฉืจืช ืœื ืฉื•ืœื— ื›ืœื•ื, ื”ืžืฉืชืžืฉ ืžื ืฆื— ืื•ื˜ื•ืžื˜ื™ืช.

ื–ื•ื”ื™ ืฉื™ื˜ืช ื“ื•ืจ ื›ื ื”, ื›ื™ ืžื ื™ืคื•ืœืฆื™ื” ื”ื™ื ื‘ืœืชื™ ืืคืฉืจื™ืช ืžื‘ื—ื™ื ื” ื˜ื›ื ื™ืช. ื›ืœ ืžืฉื—ืงื™ Tradisys ืขื•ื‘ื“ื™ื ืขืœ ื‘ืกื™ืก ื”ืืœื’ื•ืจื™ืชื ื”ืžืชื•ืืจ. ื›ืš ืคื•ืขืœื™ื ืžืฉื—ืงื™ ื‘ืœื•ืงืฆ'ื™ื™ืŸ. ื”ื›ืœ ืฉืงื•ืฃ ื•ื ื™ืชืŸ ืœืื™ืžื•ืช. ืื™ืŸ ืื ืœื•ื’ื™ื ืœืžืขืจื›ืช ื›ื–ื• ื‘ืืฃ ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืื—ืจ. ื–ื”ื• ืืงืจืื™ ื”ื•ื’ืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”