He pehea te mahi a te kaikawe korero i runga i te poraka?

I te timatanga o te tau 2017, i timata matou ki te hanga i tetahi karere i runga i te poraka [kei roto te ingoa me te hononga hono i roto i te kōtaha] ma te matapaki i nga painga mo nga karere P2P matarohia.

Paahi 2.5 tau, a i taea e matou te whakau i to maatau whakaaro: kei te waatea nga tono karere mo iOS, Tukutuku PWA, Windows, GNU/Linux, Mac OS me Android.

I tenei ra ka korero matou ki a koe me pehea te mahi a te karere poraka me pehea te mahi a nga tono a nga kaihoko me tana API.
He pehea te mahi a te kaikawe korero i runga i te poraka?

I hiahia matou ki te poraka ki te whakaoti i nga take haumarutanga me nga take tūmataiti o nga karere P2P matarohia:

  • Kotahi te paato ki te hanga i tetahi kaute - kaore he waea, he imeera ranei, kaore he urunga ki nga pukapuka korero, ki nga waahi whenua ranei.
  • Kare nga kaikorero e whakarite hononga tika; ka puta nga korero katoa ma te punaha tohatoha o nga pona. Ko nga wahitau IP a nga kaiwhakamahi kaore e uru atu ki a raatau ano.
  • Ko nga karere katoa kua whakamunatia te Anau Whakamutunga-ki-Mutunga25519xsalsa20poly1305. Te ahua nei kaore tenei e miharo ki tetahi, engari kei te tuwhera to tatou waehere puna.
  • Ka whakakorehia te whakaeke MITM - he tauwhitinga ia karere, ka hainatia e Ed25519 EdDSA.
  • Ka mutu te karere ki tona ake poraka. Te riterite me te timestamp Kaore e taea e koe te whakatika i nga poraka, na reira ko te raupapa o nga karere.
  • "Kaore au i kii" kaore e mahi me nga karere i runga i te poraka.
  • Karekau he hanganga matua e arowhai ana i te "pono" o te karere. Ka mahia tenei e te punaha tohatoha o nga pona i runga i te whakaaetanga, a na nga kaiwhakamahi.
  • Kaore e taea te aukati - kaore e taea te aukati i nga kaute, kaore e taea te whakakore i nga karere.
  • Ko te Blockchain 2FA he rereke ki te 2FA reinga ma te SMS, i pakaru te nui o te hauora.
  • Ko te kaha ki te tango i o korero katoa mai i tetahi taputapu i nga wa katoa karekau koe e pupuri i nga korero i te rohe katoa.
  • Te whakapumautanga o te tuku karere. Kaua ki te taputapu a te kaiwhakamahi, engari ki te whatunga. Ko te tikanga, he whakapumautanga tenei mo te kaha o te kaiwhiwhi ki te panui i to karere. He waahanga whai hua tenei mo te tuku whakamohiotanga whakahirahira.

Ko nga painga o te Poraka he whakauru tata ki nga moni crypto Ethereum, Dogecoin, Lisk, Dash, Bitcoin (kei te haere tonu tenei) me te kaha ki te tuku tohu i roto i nga korerorero. I hanga ano e matou he whakawhitiwhiti crypto-i roto.

Na ka - pehea te mahi katoa.

Ko te karere he tauwhitinga

Kua taunga kee te katoa ki te meka ko nga whakawhitinga i roto i te poraka e whakawhiti ana i nga tohu (moni) mai i tetahi kaiwhakamahi ki tetahi atu. Ka rite ki te Bitcoin. I hangaia e matou he momo tauwhitinga motuhake mo te tuku karere.

Ki te tuku karere i roto i te karere i runga i te poraka, me whai koe i etahi waahanga:

  1. Whakamuna kupu karere
  2. Hoatu kuputuhituhi ki roto i te tauwhitinga
  3. Waitohu te tauwhitinga
  4. Tukuna he tauwhitinga ki tetahi node whatunga
  5. Ko te punaha tohatoha o nga pona ka whakatau i te "pono" o te karere
  6. Mena he pai nga mea katoa, ko te whakawhitinga me te karere kei roto i te poraka e whai ake nei
  7. Ka tikina e te kaiwhiwhi te tauwhitinga karere me te wetemuna

Ko nga taahiraa 1–3 me te 7 ka mahia i te rohe ki runga i te kiritaki, ka mahia nga hikoinga 5-6 ki nga kaihautu.

Whakamunatanga karere

Kua whakamunatia te karere ki te taviri tūmataiti a te kaituku me te kī tūmatanui a te kaiwhiwhi. Ka tangohia e matou te taviri a te iwi mai i te whatunga, engari mo tenei, me arawhiti te kaute a te kaiwhiwhi, ara, kia kotahi te tauwhitinga. Ka taea e koe te whakamahi i te tono REST GET /api/accounts/getPublicKey?address={ADAMANT address}, a i te wa e utaina ana nga korerorero, ka watea kee nga taviri a te hunga korero.

He pehea te mahi a te kaikawe korero i runga i te poraka?

Ka whakamuna te karere i nga karere ma te whakamahi i te curve25519xsalsa20poly1305 algorithm (Pouaka NaCl). I te mea kei roto i te kaute nga taviri Ed25519, hei hanga pouaka, me tahuri nga ki ki te Curve25519 Diffie-Hellman i te tuatahi.

Anei tetahi tauira i roto i te 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)
  }
}

Te hanga tauwhitinga me te karere

Ko te tauwhitinga te hanganga whanui e whai ake nei:

{
  "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": {}
}

Mo te whakawhitiwhiti korero, ko te mea nui asset - me whakatakoto he karere ki roto i te ahanoa chat me te hanganga:

  • message - tiakina te karere whakamunatia
  • own_message - karekau
  • type — momo karere

Ka wehewehea ano nga karere ki nga momo. Ko te tikanga, ko te tawhā type ka korero ki a koe me pehea te mohio message. Ka taea e koe te tuku korero noa, ka taea ranei e koe te tuku i tetahi mea me nga mea whakamere i roto - hei tauira, koinei te mahi a te karere i nga whakawhitinga moni crypto i roto i nga korerorero.

Ko te mutunga, ka hangaia he tauwhitinga:

{
  "transaction": {
    "type": 8,
    "amount": 0,
    "senderId": "U12499126640447739963",
    "senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
    "asset": {
      "chat": {
        "message": "cb682accceef92d7cddaaddb787d1184ab5428",
        "own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
        "type": 1
      }
    },
    "recipientId": "U15677078342684640219",
    "timestamp": 63228087,
    "signature": "тут будет подпись"
  }
}

Waitohu tauwhitinga

Hei whakarite kia maia te katoa ki te pono o te kaituku me te kaiwhiwhi, te wa tuku me nga korero o te karere, ka hainatia te tauwhitinga. Ma te hainatanga mamati ka taea e koe te manatoko i te pono o tetahi tauwhitinga ma te whakamahi i te taviri a te iwi - kaore e hiahiatia he ki motuhake mo tenei.

Engari ko te hainatanga ka mahia ma te whakamahi i te taviri tūmataiti:

He pehea te mahi a te kaikawe korero i runga i te poraka?

Ko te hoahoa e whakaatu ana i te tuatahi ka hainatia te tauwhitinga me SHA-256 ka haina Ed25519 EdDSA ka whiwhi hainatanga signature, a ko te ID tauwhitinga he waahanga o te SHA-256 hash.

Tauira whakatinanatanga:

1 — Hangaia he poraka raraunga, tae atu ki te karere

/**
 * 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 - Tatau SHA-256 mai i te paraka raraunga

/**
 * 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 — Waitohu te tauwhitinga

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

Te tuku tauwhitinga me te karere ki te node whatunga

I te mea kua whakahekehia te whatunga, ka mahi tetahi o nga pona me te API tuwhera. Te tono POST ki te pito mutunga api/transactions:

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

Hei whakautu ka whiwhi matou i tetahi ID tauwhitinga o te momo

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

Whakamana Tauwhitinga

Ko te punaha tohatoha o nga pona, i runga i te whakaaetanga, ka whakatau i te "pono" o te karere tauwhitinga. Mai i a wai, ki a wai, ahea, mena i whakakapihia te karere ki tetahi atu, me te tika te tohu o te wa tuku. He painga tino nui tenei mo te poraka - kaore he hanganga pokapū e whai mana ana mo te manatoko, a, ko te raupapa o nga karere me o raatau ihirangi kaore e taea te tinihanga.

Tuatahi, ka tirotirohia e tetahi pona te tika, ka tukuna atu ki etahi atu - mena ka kii te nuinga kei te pai nga mea katoa, ka uru te tauwhitinga ki te poraka o muri mai o te mekameka - koinei te whakaaro.

He pehea te mahi a te kaikawe korero i runga i te poraka?

Ko te wahanga o te waehere node kei te haepapa mo nga arowhai ka taea te tiro i runga i GitHub - validator.js и manatoko.js. Ae, ka rere te node i runga i te Node.js.

Me te tauwhitinga me te karere i roto i te poraka

Mena ka tutuki te whakaaetanga, ko te whakawhitinga me ta maatau korero ka uru ki te poraka e whai ake nei me etahi atu whakawhitinga whaimana.

Ko nga poraka he raupapa tino kaha, a ko ia poraka ka whai ake ka hangaia i runga i nga tohu o nga poraka o mua.

He pehea te mahi a te kaikawe korero i runga i te poraka?

Ko te kaupapa ko ta tatou karere kei roto ano i tenei raupapa, kaore e taea te "whakahou". Mena he maha nga karere ka taka ki roto i tetahi poraka, ka whakatauhia to raatau ota timestamp karere.

Pānui karere

Ko te tono karere ka tango i nga whakawhitinga mai i te poraka ka tukuna ki te kaiwhiwhi. Mo tenei i hanga e matou he mutunga api/chatrooms.

E waatea ana nga whakawhitinga katoa ki te katoa - ka taea e koe te whiwhi karere whakamunatia. Engari ko te kaiwhiwhi anake ka taea te wetewete ma te whakamahi i tana taviri tūmataiti me te kī tūmatanui a te kaituku:

**
 * 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) : ''
}

He aha atu ano?

I te mea ka tukuna nga karere penei i roto i te 5 hēkona - koinei te wa ka puta mai he paraka whatunga hou - i puta mai he hononga turanga kiritaki-ki-node me te node-ki-node. Ina whiwhi tauwhitinga hou tetahi node, ka tirohia e ia tona mana me te tuku atu ki etahi atu pona. Kei te waatea te tauwhitinga ki nga kaihoko karere ahakoa i mua i te puta o te whakaaetanga me te whakauru ki roto i te poraka. Ma tenei ka tukuna e matou nga karere inamata, pera i nga karere tere.

Hei rokiroki i te pukapuka wahitau, i hanga e matou he KVS - Rokiroki Uara-Kua - he momo tauwhitinga ano tenei asset ehara i te pouaka-NaCl i whakamunatia, engari NaCl-secretbox. Koinei te huarahi e penapena ai te karere i etahi atu raraunga.

Ko nga whakawhitinga kōnae/whakaahua me nga korerorero a-rōpū me mahi tonu. Ae ra, i roto i te whakatakotoranga blunder-and-blunder ka taea e tenei te "hurihia" tere, engari e hiahia ana matou ki te pupuri i te taumata o te noho muna.

Ae, he mahi tonu hei mahi - ko te tikanga, ko te whakaaro mo te noho tūmataitinga e kore nga kaiwhakamahi e hono atu ki nga pona whatunga whanui, engari ka whakaara ake i a raatau ake. He aha te ōrau o ngā kaiwhakamahi ki ō whakaaro e mahi ana i tēnei? E tika ana, 0. I taea e matou te whakaoti i tenei take me te putanga Tor o te karere.

Kua whakamatauhia e matou ka taea e tetahi karere i runga i te poraka te noho. I mua, kotahi noa te nganatanga i te tau 2012 - karere bit, i rahua na te roa o nga wa tuku karere, te uta CPU, me te kore o nga tono waea.

A ko te pohehe na te mea ko nga karere i runga i te poraka kei mua i to ratau wa - kaore nga tangata i te rite ki te kawe kawenga mo a raatau putea, ko te pupuri i nga korero whaiaro kaore ano i te ahua, kaore ano te hangarau e tuku i nga tere tere i runga i te poraka. Ka puta mai etahi atu oritenga hangarau o ta maatau kaupapa. Ka kite koe.

Source: will.com

Tāpiri i te kōrero