Sidee fariinta baahsani uga shaqeysaa blockchain?

Bilowgii 2017, waxaan bilownay inaan abuurno fariin ku saabsan blockchain [magaca iyo isku xirka ayaa ku jira astaanta] anagoo ka wada hadalnay faa'iidooyinka ka sarreeya farriimaha P2P ee caadiga ah.

Gudubtay 2.5 sanadka, waxaana awoodnay inaan xaqiijino fikradayada: codsiyada Messenger hadda waxay diyaar u yihiin iOS, Web PWA, Windows, GNU/Linux, Mac OS iyo Android.

Maanta waxaan kuu sheegi doonaa sida blockchain Messenger u shaqeeyo iyo sida codsiyada macmiilku ula shaqeyn karaan API-ga.
Sidee fariinta baahsani uga shaqeysaa blockchain?

Waxaan rabnay xannibaadda xannibaadda si ay u xalliso amniga iyo arrimaha gaarka ah ee fariimaha caadiga ah ee P2P:

  • Hal gujin si aad u abuurto akoon - ma jiraan telefoonno ama iimaylo, ma geli karaan buugaag ciwaanka ama meelaha juqraafiyeed.
  • Dhexdhexaadiyayaashu waligood ma dhisaan xiriir toos ah; dhammaan isgaarsiintu waxay ku dhacdaa hab qaybsan oo nood ah. Ciwaanka IP-ga ee isticmaalaha lama heli karo midba midka kale.
  • Dhammaan fariimaha waa la sir sir ah udhamaadka-ilaa-dhamaadka curve25519xsalsa20poly1305. Waxay u muuqataa in tani aysan cidna ka yaabin, laakiin koodka ishayadu waa furan yahay.
  • Weerarka MITM waa laga saaray - fariin kastaa waa macaamil ganacsi waxaana saxeexay Ed25519 EdDSA.
  • Farriinta waxay ku dhammaata qaybteeda gaarka ah. Joogteynta iyo timestamp Ma hagaajin kartid baloogyada, sidaas darteedna habka fariimaha.
  • "Ma odhan taas" kuma shaqayn doonto fariimaha ku saabsan blockchain.
  • Ma jiro qaab dhismeed dhexe oo hubinaya "runnimada" fariinta. Tan waxa lagu sameeyaa hab qaybsan oo qanjidhada ah oo ku salaysan is-afgarad, waxaana iska leh isticmaalayaasha.
  • Suurtagalnimada faafreebka - xisaabaadka lama xannibi karo fariimaha lama tirtiri karo.
  • Blockchain 2FA waa bedelka 2FA ee cadaabta ah iyada oo loo marayo SMS, caafimad badan baa kharribay.
  • Awoodda aad ku heli karto dhammaan wada sheekeysigaaga qalab kasta waqti kasta waxay ka dhigan tahay inaadan u baahnayn inaad ku kaydiso wada sheekaysiga gudaha gabi ahaanba.
  • Xaqiijinta gudbinta fariinta. Ma aha qalabka isticmaalaha, laakiin shabakada Asal ahaan, tani waa xaqiijinta kartida qaataha u leeyahay inuu akhriyo fariintaada. Tani waa sifo faa'iido leh oo lagu dirayo ogeysiisyada muhiimka ah.

Faa'iidooyinka Blockchain waxaa sidoo kale ka mid ah isdhexgalka dhow ee cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (kan weli waa socdaa) iyo awoodda lagu soo diro calaamadaha sheekeysiga. Waxaan xitaa sameynay isweydaarsiga isweydaarsiga crypto.

Ka dibna - sida ay u wada shaqeeyaan.

Fariintu waa wax kala iibsi

Qof kastaa wuxuu horeyba ula qabsaday xaqiiqda ah in macaamilka lacagaha ee blockchain wareejinta calaamadaha (qadaadiicda) hal isticmaale kale. Sida Bitcoin. Waxaan abuurnay nooc gaar ah oo wax kala beddelasho ah oo loogu talagalay gudbinta fariimaha.

Si aad fariin ugu dirto fariinta blockchain, waxaad u baahan tahay inaad marto dhawr tillaabo:

  1. Sir qoraalka fariinta
  2. Geli qoraalka sirta ah macaamil ganacsi
  3. Saxiix wax kala iibsiga
  4. U dir wax kala beddelashada noodhka shabakad kasta
  5. Nidaamka loo qaybiyey ee qanjidhada ayaa go'aamiya "runnimada" fariinta
  6. Haddii wax walba ay sax yihiin, macaamilka fariinta leh ayaa lagu darayaa xannibaadda soo socota
  7. Qaatahu waxa uu soo celiya macaamilka fariinta oo kala furfuro

Tallaabooyinka 1-3 iyo 7 waxaa lagu sameeyaa maxalli ahaan macmiilka, iyo tillaabooyinka 5-6 waxaa lagu sameeyaa martida loo yahay.

Fariinta sirta

Fariinta waxaa lagu sireeyay furaha gaarka ah ee diraha iyo furaha guud ee qaataha. Waxaan ka qaadan doonaa furaha dadweynaha shabakada, laakiin tan, xisaabta qaataha waa in la bilaabo, taas oo ah, leh ugu yaraan hal macaamil ganacsi. Waxaad isticmaali kartaa codsiga REST GET /api/accounts/getPublicKey?address={ADAMANT address}, iyo marka la soo shubayo sheekeysiga, furayaasha dadweynaha ee wada-hadallada ayaa mar hore diyaar noqon doona.

Sidee fariinta baahsani uga shaqeysaa blockchain?

Rasuulku wuxuu sireeyaa fariimaha isagoo isticmaalaya curve25519xsalsa20poly1305 algorithm (Sanduuqa NaCl). Maadaama akoonku ka kooban yahay furayaasha Ed25519, si loo sameeyo sanduuq, furayaasha waa in marka hore loo beddelaa Curve25519 Diffie-Hellman.

Waa kuwan tusaale ku jira JavaScript:

/**
 * Encodes a text message for sending to ADM
 * @param {string} msg message to encode
 * @param {*} recipientPublicKey recipient's public key
 * @param {*} privateKey our private key
 * @returns {{message: string, nonce: string}}
 */
adamant.encodeMessage = function (msg, recipientPublicKey, privateKey) {
  const nonce = Buffer.allocUnsafe(24)
  sodium.randombytes(nonce)

  if (typeof recipientPublicKey === 'string') {
    recipientPublicKey = hexToBytes(recipientPublicKey)
  }

  const plainText = Buffer.from(msg)
  const DHPublicKey = ed2curve.convertPublicKey(recipientPublicKey)
  const DHSecretKey = ed2curve.convertSecretKey(privateKey)

  const encrypted = nacl.box(plainText, nonce, DHPublicKey, DHSecretKey)

  return {
    message: bytesToHex(encrypted),
    nonce: bytesToHex(nonce)
  }
}

Samaynta macaamil ganacsi fariin leh

Wax kala iibsiga waxa uu leeyahay qaabdhismeedka guud ee soo socda:

{
  "id": "15161295239237781653",
  "height": 7585271,
  "blockId": "16391508373936326027",
  "type": 8,
  "block_timestamp": 45182260,
  "timestamp": 45182254,
  "senderPublicKey": "bd39cc708499ae91b937083463fce5e0668c2b37e78df28f69d132fce51d49ed",
  "senderId": "U16023712506749300952",
  "recipientId": "U17653312780572073341",
  "recipientPublicKey": "23d27f616e304ef2046a60b762683b8dabebe0d8fc26e5ecdb1d5f3d291dbe21",
  "amount": 204921300000000,
  "fee": 50000000,
  "signature": "3c8e551f60fedb81e52835c69e8b158eb1b8b3c89a04d3df5adc0d99017ffbcb06a7b16ad76d519f80df019c930960317a67e8d18ab1e85e575c9470000cf607",
  "signatures": [],
  "confirmations": 3660548,
  "asset": {}
}

Xawilaadda fariinta, waxa ugu muhiimsan waa asset - waxaad u baahan tahay inaad farriin geliso shayga chat qaab dhismeed leh:

  • message - keydi fariinta sir ah
  • own_message - waxba
  • type - nooca fariinta

Farriimaha sidoo kale waxaa loo qaybiyaa noocyo. Asal ahaan, halbeegga type wuxuu kuu sheegayaa sida loo fahmo message. Waxaad soo diri kartaa kaliya qoraal, ama waxaad soo diri kartaa shay ay ku jiraan waxyaabo xiiso leh gudaha - tusaale ahaan, tani waa sida uu malaa'iguhu u sameeyo wareejinta cryptocurrency ee sheekaysiga.

Natiijo ahaan, waxaan abuurnaa wax kala beddelasho:

{
  "transaction": {
    "type": 8,
    "amount": 0,
    "senderId": "U12499126640447739963",
    "senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
    "asset": {
      "chat": {
        "message": "cb682accceef92d7cddaaddb787d1184ab5428",
        "own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
        "type": 1
      }
    },
    "recipientId": "U15677078342684640219",
    "timestamp": 63228087,
    "signature": "Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ подпись"
  }
}

Saxeexa macaamil ganacsi

Si loo hubiyo in qof kastaa uu ku kalsoon yahay xaqiiqada soo-diraha iyo qaataha, wakhtiga la dirayo iyo waxa ku jira fariinta, macaamilka waa la saxiixay. Saxeexa dhijitaalka ah wuxuu kuu ogolaanayaa inaad xaqiijiso xaqiiqada macaamilka adoo isticmaalaya fure dadweyne - furaha gaarka ah looma baahna tan.

Laakiin saxiixa laftiisa waxaa lagu sameeyaa iyadoo la adeegsanayo furaha gaarka ah:

Sidee fariinta baahsani uga shaqeysaa blockchain?

Jaantusku waxa uu muujinayaa in marka hore aanu xadhkaha goosanay SHA-256 ka bacdina aanu saxeexno Ed25519 EdDSA oo saxiix signature, iyo aqoonsiga wax kala iibsiga waa qayb ka mid ah SHA-256 hash.

Tusaale fulinta:

1 - Samee xogta block, oo ay ku jirto fariin

/**
 * Calls `getBytes` based on transaction type
 * @see privateTypes
 * @implements {ByteBuffer}
 * @param {transaction} trs
 * @param {boolean} skipSignature
 * @param {boolean} skipSecondSignature
 * @return {!Array} Contents as an ArrayBuffer.
 * @throws {error} If buffer fails.
 */

adamant.getBytes = function (transaction) {

  ...

  switch (transaction.type) {
    case constants.Transactions.SEND:
      break
    case constants.Transactions.CHAT_MESSAGE:
      assetBytes = this.chatGetBytes(transaction)
      assetSize = assetBytes.length
      break

…

    default:
      alert('Not supported yet')
  }

  var bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true)

  bb.writeByte(transaction.type)
  bb.writeInt(transaction.timestamp)

  ...

  bb.flip()
  var arrayBuffer = new Uint8Array(bb.toArrayBuffer())
  var buffer = []

  for (var i = 0; i < arrayBuffer.length; i++) {
    buffer[i] = arrayBuffer[i]
  }

  return Buffer.from(buffer)
}

2 - Tiri SHA-256 ee xogta block

/**
 * Creates hash based on transaction bytes.
 * @implements {getBytes}
 * @implements {crypto.createHash}
 * @param {transaction} trs
 * @return {hash} sha256 crypto hash
 */
adamant.getHash = function (trs) {
  return crypto.createHash('sha256').update(this.getBytes(trs)).digest()
}

3 - Saxiix macaamil ganacsi

adamant.transactionSign = function (trs, keypair) {
  var hash = this.getHash(trs)
  return this.sign(hash, keypair).toString('hex')
}

/**
 * Creates a signature based on a hash and a keypair.
 * @implements {sodium}
 * @param {hash} hash
 * @param {keypair} keypair
 * @return {signature} signature
 */
adamant.sign = function (hash, keypair) {
  return sodium.crypto_sign_detached(hash, Buffer.from(keypair.privateKey, 'hex'))
}

U diraya macaamil xawilaad fariin leh marinka shabakada

Maadaama shabakadu ay tahay mid baahsan, mid kasta oo ka mid ah noodhka API furan ayaa samayn doona. Samaynta codsi POST barta dhamaadka api/transactions:

curl 'api/transactions' -X POST 
  -d 'TX_DATA'

Jawaabta waxaan heli doonaa aqoonsiga macaamil ganacsi ee nooca

{
    "success": true,
    "nodeTimestamp": 63228852,
    "transactionId": "6146865104403680934"
}

Xaqiijinta Ganacsiga

Nidaamka qaybsan ee qanjidhada, oo ku salaysan is-afgarad, ayaa go'aaminaya "saxanimada" fariinta macaamilka. Cidda iyo cidda loo dirayo, goorma, in farriinta lagu beddelay mid kale, iyo in wakhtiga la dirayo si sax ah loo tilmaamay. Tani waa faa'iido aad muhiim u ah blockchain - ma jiro qaab dhismeed dhexe oo mas'uul ka ah xaqiijinta, iyo taxanaha fariimaha iyo nuxurka aan la been abuuri karin.

Marka hore, hal noode ayaa hubinaya saxnaanta, ka dibna u dira dadka kale - haddii aqlabiyadda ay sheegaan in wax walba ay hagaagsan yihiin, macaamilka ayaa lagu dari doonaa qaybta xigta ee silsiladda - tani waa la isku raacsan yahay.

Sidee fariinta baahsani uga shaqeysaa blockchain?

Qaybta koodka noodhka ee masuulka ka ah jeegaga waxa laga eegi karaa GitHub - ansaxiyay.js ΠΈ xaqiijin.js. Haa, noodhka waxa uu ku socdaa Node.js.

Oo ay ku jirto macaamil ganacsi oo fariin ku jirta block

Haddii heshiis la gaaro, macaamilka fariintayada waxaa lagu dari doonaa block soo socda oo ay weheliso macaamilo kale oo ansax ah.

Baloogyadu waxay leeyihiin taxane adag, oo baloog kasta oo xiga ayaa la sameeyay iyadoo lagu salaynayo xashiishka blocks hore.

Sidee fariinta baahsani uga shaqeysaa blockchain?

Ujeedadu waxay tahay in fariinteena ay sidoo kale ku jirto taxanahan oo aan "dib loo habeyn karin". Haddii dhowr fariimo ay ku dhacaan block, dalabkooda ayaa lagu go'aamin doonaa timestamp fariimaha.

Fariimaha akhriska

Codsiga farriinta wuxuu soo celiyaa macaamilka blockchain ee loo diro qaataha. Tan waxaan u samaynay qodob dhamaadka api/chatrooms.

Dhammaan wax kala iibsiga ayaa diyaar u ah qof kasta - waxaad heli kartaa fariimo sir ah. Laakin qaataha kaliya ayaa kala saari kara isagoo isticmaalaya furihiisa gaarka ah iyo furaha guud ee soo diraha:

**
 * Decodes the incoming message
 * @param {any} msg encoded message
 * @param {string} senderPublicKey sender public key
 * @param {string} privateKey our private key
 * @param {any} nonce nonce
 * @returns {string}
 */
adamant.decodeMessage = function (msg, senderPublicKey, privateKey, nonce) {
  if (typeof msg === 'string') {
    msg = hexToBytes(msg)
  }

  if (typeof nonce === 'string') {
    nonce = hexToBytes(nonce)
  }

  if (typeof senderPublicKey === 'string') {
    senderPublicKey = hexToBytes(senderPublicKey)
  }

  if (typeof privateKey === 'string') {
    privateKey = hexToBytes(privateKey)
  }

  const DHPublicKey = ed2curve.convertPublicKey(senderPublicKey)
  const DHSecretKey = ed2curve.convertSecretKey(privateKey)
  const decrypted = nacl.box.open(msg, nonce, DHPublicKey, DHSecretKey)

  return decrypted ? decode(decrypted) : ''
}

Maxaa kale?

Maaddaama farriimaha sidan lagu soo gudbiyo qiyaastii 5 ilbiriqsi - tani waa markii ay soo baxayso xannibaado shabakadeed cusub - waxaan la nimid xiriiriyaha-la-node-ka-node-ka-node-ka-node-ka. Marka ay noodu hesho wax kala iibsi cusub, waxay hubisaa ansaxnimadeeda waxayna u sii gudbisaa qanjidhada kale. Wax kala iibsigu waa u diyaar macaamiisheeda Messenger xittaa ka hor inta aan la isku raacsanayn oo lagu darin xannibaadda. Sidan ayaanu fariimaha ugu gudbin doonaa isla markaaba, sida fariimaha degdega ah ee caadiga ah.

Si loo kaydiyo buugga ciwaanka, waxaanu samaynay KVS - Kaydinta Qiimaha-furaha - tani waa nooc kale oo wax kala iibsiga asset Ma aha NaCl-box in la sireeyay, laakiin NaCl-sanduuqa sirta ah. Sidan ayuu rasuulku u kaydiyaa xogta kale.

Wareejinta faylka/sawirrada iyo wada sheekaysiga kooxuhu wali waxay u baahan yihiin shaqo badan. Dabcan, qaabka qallafsanaanta-iyo-qallafsanaanta tani si dhakhso ah ayaa loo "lagu-burin karaa", laakiin waxaan rabnaa inaan ilaalino isla heerka gaarka ah.

Haa, weli waxaa jirta shaqo la qabanayo - sida ugu habboon, sirta dhabta ah waxay u malaynaysaa in isticmaalayaashu aysan ku xirmi doonin noodhka shabakada dadweynaha, laakiin ay kor u qaadi doonaan tooda. Immisa boqolkiiba isticmaalayaasha ayaad u malaynaysaa inay tan sameeyaan? Taasi waa sax, 0. Waxa aanu awoodnay in aanu qayb ahaan ku xalinno arrintan qaabka Tor ee rasuulka.

Waxaan cadeynay in fariinta blockchain ay jiri karto. Markii hore, waxaa jiray hal isku day oo kaliya 2012 - fariidnimo, kaas oo ku guuldareystay sababo la xiriira waqtiyada fariinta dheer ee gudbinta, culeyska CPU, iyo la'aanta codsiyada mobilada.

Shakiga ayaa sabab u ah xaqiiqda ah in farriinta ku jirta blockchain ay ka horeyso waqtigooda - dadku diyaar uma aha inay qaataan mas'uuliyadda xisaabtooda, lahaanshaha macluumaadka shakhsiyeed weli ma ahan isbeddel, iyo tignoolajiyadu ma ogola xawaaraha sare ee blockchain. Analoog farsamo oo badan oo mashruuceena ayaa soo bixi doona xiga. Waad arki doontaa.

Source: www.habr.com

Add a comment