เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ?

2017 เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ•เจฒเจพเจธเจฟเจ• P2P เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐเจพเจ‚ เจฆเฉ‡ เจซเจพเจ‡เจฆเจฟเจ†เจ‚ เจฌเจพเจฐเฉ‡ เจšเจฐเจšเจพ เจ•เจฐเจ•เฉ‡ เจฌเจฒเจพเจ•เจšเฉˆเจจ [เจจเจพเจฎ เจ…เจคเฉ‡ เจฒเจฟเฉฐเจ• เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจนเจจ] เจ‰เฉฑเจคเฉ‡ เจ‡เฉฑเจ• เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจฌเจฃเจพเจ‰เจฃเจพ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพเฅค

เจชเจพเจธ เจ•เฉ€เจคเจพ 2.5 เจธเจพเจฒ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจงเจพเจฐเจจเจพ เจฆเฉ€ เจชเฉเจธเจผเจŸเฉ€ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹ เจ—เจ: เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจนเฉเจฃ iOS, Web PWA, Windows, GNU/Linux, Mac OS เจ…เจคเฉ‡ Android เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเจจเฅค

เจ…เฉฑเจœ เจ…เจธเฉ€เจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจฒเจพเจ‡เฉฐเจŸ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ‡เจธ เจฆเฉ‡ API เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจเฅค
เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจ…เจธเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจธเฉ€ เจ•เจฟ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจ•เจฒเจพเจธเจฟเจ• P2P เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐเจพเจ‚ เจฆเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจ…เจคเฉ‡ เจ—เฉ‹เจชเจจเฉ€เจฏเจคเจพ เจฎเฉเฉฑเจฆเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเฉ‡:

  • เจ‡เฉฑเจ• เจ–เจพเจคเจพ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจ•เจฒเจฟเฉฑเจ• - เจ•เฉ‹เจˆ เจซเฉ‹เจจ เจœเจพเจ‚ เจˆเจฎเฉ‡เจฒ เจจเจนเฉ€เจ‚, เจเจกเจฐเฉˆเฉฑเจธ เจฌเฉเฉฑเจ• เจœเจพเจ‚ เจญเฉ‚-เจธเจฅเจพเจจ เจคเฉฑเจ• เจ•เฉ‹เจˆ เจชเจนเฉเฉฐเจš เจจเจนเฉ€เจ‚เฅค
  • เจตเจพเจฐเจคเจพเจ•เจพเจฐ เจ•เจฆเฉ‡ เจตเฉ€ เจธเจฟเฉฑเจงเฉ‡ เจธเฉฐเจชเจฐเจ• เจธเจฅเจพเจชเจค เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡; เจธเจพเจฐเฉ‡ เจธเฉฐเจšเจพเจฐ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ€ เจตเฉฐเจกเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจฆเฉเจ†เจฐเจพ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ‡ IP เจชเจคเฉ‡ เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ‡ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจนเจจเฅค
  • เจธเจพเจฐเฉ‡ เจธเฉเจจเฉ‡เจนเฉ‡ Encrypted End-to-End curve25519xsalsa20poly1305 เจนเจจเฅค เจ…เจœเจฟเจนเจพ เจฒเจ—เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจน เจ•เจฟเจธเฉ‡ เจจเฉ‚เฉฐ เจนเฉˆเจฐเจพเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เจพ, เจชเจฐ เจธเจพเจกเจพ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ–เฉเฉฑเจฒเฉเจนเจพ เจนเฉˆ.
  • MITM เจนเจฎเจฒเฉ‡ เจจเฉ‚เฉฐ เจฌเจพเจนเจฐ เจฐเฉฑเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ - เจนเจฐเฉ‡เจ• เจธเฉเจจเฉ‡เจนเจพ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจนเฉˆ เจ…เจคเฉ‡ Ed25519 EdDSA เจฆเฉเจ†เจฐเจพ เจนเจธเจคเจพเจ–เจฐเจฟเจค เจนเฉˆเฅค
  • เจธเฉเจจเฉ‡เจนเจพ เจ‡เจธ เจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจ–เจคเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉˆ. เจ‡เจ•เจธเจพเจฐเจคเจพ เจ…เจคเฉ‡ timestamp เจคเฉเจธเฉ€เจ‚ เจฌเจฒเจพเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ เฉ€เจ• เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ เจ‡เจธเจฒเจˆ เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจฆเจพ เจ•เฉเจฐเจฎ.
  • "เจฎเฉˆเจ‚ เจ‡เจน เจจเจนเฉ€เจ‚ เจ•เจฟเจนเจพ" เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เจพเฅค
  • เจ‡เฉฑเจฅเฉ‡ เจ•เฉ‹เจˆ เจ•เฉ‡เจ‚เจฆเจฐเฉ€ เจขเจพเจ‚เจšเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเฉ‹ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ "เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ" เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจธเจนเจฟเจฎเจคเฉ€ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ€ เจตเฉฐเจกเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจฆเฉเจ†เจฐเจพ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจน เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ€ เจฎเจฒเจ•เฉ€เจ…เจค เจนเฉˆเฅค
  • เจธเฉˆเจ‚เจธเจฐเจธเจผเจฟเจช เจฆเฉ€ เจ…เจธเฉฐเจญเจตเจคเจพ - เจ–เจพเจคเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจฌเจฒเฉŒเจ• เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจ…เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‡เจ† เจจเจนเฉ€เจ‚ เจœเจพ เจธเจ•เจฆเจพเฅค
  • เจฌเจฒเจพเจ•เจšเฉˆเจจ 2FA SMS เจฆเฉเจ†เจฐเจพ เจจเจฐเจ• 2FA เจฆเจพ เจตเจฟเจ•เจฒเจช เจนเฉˆ, เจฌเจนเฉเจค เจธเจพเจฐเฉ€ เจธเจฟเจนเจค เจฌเจฐเจฌเจพเจฆ เจ•เฉ€เจคเฉ€เฅค
  • เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฎเฉ‡เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจกเจฟเจตเจพเจˆเจธ เจคเฉ‹เจ‚ เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจ—เฉฑเจฒเจฌเจพเจคเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ—เฉฑเจฒเจฌเจพเจค เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค
  • เจธเฉเจจเฉ‡เจนเจพ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจฆเฉ€ เจชเฉเจธเจผเจŸเฉ€. เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจกเจฟเจตเจพเจˆเจธ เจฒเจˆ เจจเจนเฉ€เจ‚, เจชเจฐ เจจเฉˆเจŸเจตเจฐเจ• เจฒเจˆ. เจ…เจธเจฒ เจตเจฟเฉฑเจš, เจ‡เจน เจคเฉเจนเจพเจกเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจ เจฆเฉ€ เจชเฉเจฐเจพเจชเจคเจ•เจฐเจคเจพ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจฆเฉ€ เจชเฉเจธเจผเจŸเฉ€ เจนเฉˆเฅค เจ‡เจน เจจเจพเจœเจผเฉเจ• เจธเฉ‚เจšเจจเจพเจตเจพเจ‚ เจญเฉ‡เจœเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจนเฉˆเฅค

เจฌเจฒเจพเจ•เจšเฉˆเจจ เจฒเจพเจญเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉเจฐเจฟเจชเจŸเฉ‹เจ•เจฐเฉฐเจธเฉ€ เจˆเจฅเจฐเจฟเจ…เจฎ, เจกเฉ‹เจ—เฉ‡เจ•เฉ‹เจ‡เจจ, เจฒเจฟเจธเจ•, เจกเฉˆเจธเจผ, เจฌเจฟเจŸเจ•เฉ‹เจ‡เจจ (เจ‡เจน เจ…เจœเฉ‡ เจตเฉ€ เจœเจพเจฐเฉ€ เจนเฉˆ) เจ…เจคเฉ‡ เจšเฉˆเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจŸเฉ‹เจ•เจจ เจญเฉ‡เจœเจฃ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจจเจพเจฒ เจจเจœเจผเจฆเฉ€เจ•เฉ€ เจเจ•เฉ€เจ•เจฐเจฃ เจธเจผเจพเจฎเจฒ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเจฟเจฒเจŸ-เจ‡เจจ เจ•เฉเจฐเจฟเจชเจŸเฉ‹ เจเจ•เจธเจšเฉ‡เจ‚เจœเจฐ เจตเฉ€ เจฌเจฃเจพเจ‡เจ† เจนเฉˆเฅค

เจ…เจคเฉ‡ เจซเจฟเจฐ - เจ‡เจน เจธเจญ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ.

เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจนเฉˆ

เจนเจฐ เจ•เฉ‹เจˆ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‡เจธ เจคเฉฑเจฅ เจฆเจพ เจ†เจฆเฉ€ เจนเฉˆ เจ•เจฟ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจŸเฉ‹เจ•เจจเจพเจ‚ (เจธเจฟเฉฑเจ•เฉ‡) เจตเจฟเฉฑเจš เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจเจพเจ‚ เจ‡เฉฑเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจคเฉ‹เจ‚ เจฆเฉ‚เจœเฉ‡ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจฆเฉ€เจ†เจ‚ เจนเจจ. เจฌเจฟเจŸเจ•เฉ‹เจ‡เจจ เจตเจพเจ‚เจ—เฅค เจ…เจธเฉ€เจ‚ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจšเจพเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจ•เจฟเจธเจฎ เจฆเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฌเจฃเจพเจ‡เจ† เจนเฉˆเฅค

เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจตเจฟเฉฑเจš เจธเฉเจจเฉ‡เจนเจพ เจญเฉ‡เจœเจฃ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจˆ เจชเฉœเจพเจตเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

  1. เจธเฉเจจเฉ‡เจนเจพ เจŸเฉˆเจ•เจธเจŸ เจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเฉ‹
  2. เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจตเจฟเฉฑเจš เจธเจฟเจซเจฐเจŸเฉˆเจ•เจธเจŸ เจชเจพเจ“
  3. เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจ•เจฐเฉ‹
  4. เจ•เจฟเจธเฉ‡ เจตเฉ€ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจจเฉ‹เจก เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจญเฉ‡เจœเฉ‹
  5. เจจเฉ‹เจกเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฐเจกเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจ‡เฉฑเจ• เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ "เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ" เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ
  6. เจœเฉ‡ เจธเจญ เจ•เฉเจ เจ เฉ€เจ• เจนเฉˆ, เจคเจพเจ‚ เจธเฉเจจเฉ‡เจนเฉ‡ เจจเจพเจฒ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจจเฉ‚เฉฐ เจ…เจ—เจฒเฉ‡ เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ
  7. เจชเฉเจฐเจพเจชเจคเจ•เจฐเจคเจพ เจธเฉเจจเฉ‡เจนเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจกเฉ€เจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเจฆเจพ เจนเฉˆ

เจชเฉœเจพเจ… 1โ€“3 เจ…เจคเฉ‡ 7 เจ•เจฒเจพเจ‡เฉฐเจŸ 'เจคเฉ‡ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ•เจฆเจฎ 5-6 เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ 'เจคเฉ‡ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

เจธเฉเจจเฉ‡เจนเจพ เจ‡เจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ

เจธเฉเจจเฉ‡เจนเจพ เจญเฉ‡เจœเจฃ เจตเจพเจฒเฉ‡ เจฆเฉ€ เจจเจฟเฉฑเจœเฉ€ เจ•เฉเฉฐเจœเฉ€ เจ…เจคเฉ‡ เจชเฉเจฐเจพเจชเจคเจ•เจฐเจคเจพ เจฆเฉ€ เจœเจจเจคเจ• เจ•เฉเฉฐเจœเฉ€ เจจเจพเจฒ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจคเฉ‹เจ‚ เจœเจจเจคเจ• เจ•เฉเฉฐเจœเฉ€ เจฒเจตเจพเจ‚เจ—เฉ‡, เจชเจฐ เจ‡เจธเจฆเฉ‡ เจฒเจˆ, เจชเฉเจฐเจพเจชเจคเจ•เจฐเจคเจพ เจฆเจพ เจ–เจพเจคเจพ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจฏเจพเจจเฉ€, เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• REST เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ GET /api/accounts/getPublicKey?address={ADAMANT address}, เจ…เจคเฉ‡ เจšเฉˆเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ‹เจก เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡, เจตเจพเจฐเจคเจพเจ•เจพเจฐเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจœเจจเจคเจ• เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‰เจชเจฒเจฌเจง เจนเฉ‹เจฃเจ—เฉ€เจ†เจ‚เฅค

เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฐเจต25519xsalsa20poly1305 เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ (NaCl เจฌเจพเจ•เจธ). เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ–เจพเจคเฉ‡ เจตเจฟเฉฑเจš Ed25519 เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจนเจจ, เจ‡เฉฑเจ• เจฌเจพเจ•เจธ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ Curve25519 Diffie-Hellman เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจฅเฉ‡ 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)
  }
}

เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฌเจฃเจพเจ‰เจฃเจพ

เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€ เจ†เจฎ เจฌเจฃเจคเจฐ เจนเฉˆ:

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

เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฒเจˆ, เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจšเฉ€เจœเจผ เจนเฉˆ asset - เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจฌเจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจฒเจ—เจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ chat เจฌเจฃเจคเจฐ เจฆเฉ‡ เจจเจพเจฒ:

  • message - เจเจจเจ•เฉเจฐเจฟเจชเจŸเจก เจธเฉฐเจฆเฉ‡เจธเจผ เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเฉ‹
  • own_message - nonce
  • type - เจธเฉเจจเฉ‡เจนเจพ เจ•เจฟเจธเจฎ

เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจ•เจฟเจธเจฎเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค เจ…เจธเจฒ เจตเจฟเฉฑเจš, เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ type เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจธเจฎเจเจฃเจพ เจนเฉˆ message. เจคเฉเจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจŸเฉˆเจ•เจธเจŸ เจญเฉ‡เจœ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ…เฉฐเจฆเจฐ เจฆเจฟเจฒเจšเจธเจช เจšเฉ€เจœเจผเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจตเจธเจคเฉ‚ เจญเฉ‡เจœ เจธเจ•เจฆเฉ‡ เจนเฉ‹ - เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจšเฉˆเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉเจฐเจฟเจชเจŸเฉ‹เจ•เฉเจฐเฉฐเจธเฉ€ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:

{
  "transaction": {
    "type": 8,
    "amount": 0,
    "senderId": "U12499126640447739963",
    "senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
    "asset": {
      "chat": {
        "message": "cb682accceef92d7cddaaddb787d1184ab5428",
        "own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
        "type": 1
      }
    },
    "recipientId": "U15677078342684640219",
    "timestamp": 63228087,
    "signature": "ั‚ัƒั‚ ะฑัƒะดะตั‚ ะฟะพะดะฟะธััŒ"
  }
}

เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฆเฉ‡ เจฆเจธเจคเจ–เจค

เจ‡เจน เจธเฉเจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจฟ เจนเจฐ เจ•เฉ‹เจˆ เจญเฉ‡เจœเจฃ เจตเจพเจฒเฉ‡ เจ…เจคเฉ‡ เจชเฉเจฐเจพเจชเจคเจ•เจฐเจคเจพ เจฆเฉ€ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ, เจญเฉ‡เจœเจฃ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจ…เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ เจธเจฎเจ—เจฐเฉ€ เจตเจฟเฉฑเจš เจตเจฟเจธเจผเจตเจพเจธ เจฐเฉฑเจ–เจฆเจพ เจนเฉˆ, เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค เจ‡เฉฑเจ• เจกเจฟเจœเจผเฉ€เจŸเจฒ เจฆเจธเจคเจ–เจค เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจœเจจเจคเจ• เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฆเฉ€ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฆเฉ€ เจชเฉเจธเจผเจŸเฉ€ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ - เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจจเจฟเฉฑเจœเฉ€ เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจชเจฐ เจนเจธเจคเจพเจ–เจฐ เจ–เฉเจฆ เจชเฉเจฐเจพเจˆเจตเฉ‡เจŸ เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ:

เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจšเจฟเฉฑเจคเจฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ SHA-256 เจจเจพเจฒ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจจเฉ‚เฉฐ เจนเฉˆเจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‡เจธ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ Ed25519 EdDSA เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฆเจธเจคเจ–เจค เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹ signature, เจ…เจคเฉ‡ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ ID SHA-256 เจนเฉˆเจธเจผ เจฆเจพ เจนเจฟเฉฑเจธเจพ เจนเฉˆเฅค

เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ:

1 โ€” เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจธเจฎเฉ‡เจค, เจ‡เฉฑเจ• เจกเจพเจŸเจพ เจฌเจฒเจพเจ• เจฌเจฃเจพเจ“

/**
 * 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 - เจกเจพเจŸเจพ เจฌเจฒเจพเจ• เจคเฉ‹เจ‚ SHA-256 เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจ•เจฐเฉ‹

/**
 * 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 - เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจ•เจฐเฉ‹

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

เจ‡เฉฑเจ• เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจจเฉ‹เจก เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจญเฉ‡เจœเจฃเจพ

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจจเฉˆเจŸเจตเจฐเจ• เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจนเฉˆ, เจ‡เฉฑเจ• เจ“เจชเจจ API เจตเจพเจฒเจพ เจ•เฉ‹เจˆ เจตเฉ€ เจจเฉ‹เจก เจ•เจฐเฉ‡เจ—เจพเฅค เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• POST เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจจเจพ api/transactions:

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

เจœเจตเจพเจฌ เจตเจฟเฉฑเจš เจธเจพเจจเฉ‚เฉฐ เจ•เจฟเจธเจฎ เจฆเฉ€ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ ID เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจตเฉ‡เจ—เฉ€

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

เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ

เจจเฉ‹เจกเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฐเจกเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€, เจธเจนเจฟเจฎเจคเฉ€ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡, เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ "เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ" เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจ•เจฟเจธ เจคเฉ‹เจ‚ เจ…เจคเฉ‡ เจ•เจฟเจธ เจจเฉ‚เฉฐ, เจ•เจฆเฉ‹เจ‚, เจ•เฉ€ เจธเฉฐเจฆเฉ‡เจธเจผ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจจเจพเจฒ เจฌเจฆเจฒเจฟเจ† เจ—เจฟเจ† เจธเฉ€, เจ…เจคเฉ‡ เจ•เฉ€ เจญเฉ‡เจœเจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจฆเจฐเจธเจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€เฅค เจ‡เจน เจฌเจฒเจพเจ•เจšเฉˆเจจ เจฆเจพ เจ‡เฉฑเจ• เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจซเจพเจ‡เจฆเจพ เจนเฉˆ - เจ‡เฉฑเจฅเฉ‡ เจ•เฉ‹เจˆ เจ•เฉ‡เจ‚เจฆเจฐเฉ€ เจขเจพเจ‚เจšเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเฉ‹ เจคเจธเจฆเฉ€เจ• เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉˆ, เจ…เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจฆเฉ€ เจฒเฉœเฉ€ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจจเฉ‚เฉฐ เจœเจพเจ…เจฒเฉ€ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ‡เฉฑเจ• เจจเฉ‹เจก เจธเจผเฉเฉฑเจงเจคเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจฆเฉ‚เจœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ - เจœเฉ‡ เจฌเจนเฉเจฎเจค เจ•เจนเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจธเจญ เจ•เฉเจ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจนเฉˆ, เจคเจพเจ‚ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจšเฉ‡เจจ เจฆเฉ‡ เจ…เจ—เจฒเฉ‡ เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ - เจ‡เจน เจธเจนเจฟเจฎเจคเฉ€ เจนเฉˆ.

เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจจเฉ‹เจก เจ•เฉ‹เจก เจฆเจพ เจ‰เจน เจนเจฟเฉฑเจธเจพ เจœเฉ‹ เจœเจพเจ‚เจšเจพเจ‚ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉˆ GitHub 'เจคเฉ‡ เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ - validator.js ะธ verify.js. เจนเจพเจ‚, เจจเฉ‹เจก Node.js 'เจคเฉ‡ เจšเฉฑเจฒเจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจธเจฎเฉ‡เจค

เจœเฉ‡เจ•เจฐ เจธเจนเจฟเจฎเจคเฉ€ เจฌเจฃ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจธเจพเจกเฉ‡ เจธเฉเจจเฉ‡เจนเฉ‡ เจจเจพเจฒ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเฉˆเจง เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฆเฉ‡ เจจเจพเจฒ เจ…เจ—เจฒเฉ‡ เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจฌเจฒเจพเจ•เจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจ–เจผเจค เจ•เฉเจฐเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจนเจฐเฉ‡เจ• เจ…เจ—เจฒเฉ‡ เจฌเจฒเจพเจ• เจฆเจพ เจ—เจ เจจ เจชเจฟเจ›เจฒเฉ‡ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ‡ เจนเฉˆเจธเจผเจพเจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจฌเจฟเฉฐเจฆเฉ‚ เจ‡เจน เจนเฉˆ เจ•เจฟ เจธเจพเจกเจพ เจธเฉฐเจฆเฉ‡เจธเจผ เจตเฉ€ เจ‡เจธ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเฉˆ เจ…เจคเฉ‡ "เจฎเฉเฉœ เจตเจฟเจตเจธเจฅเจฟเจค" เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ•เจˆ เจธเฉเจจเฉ‡เจนเฉ‡ เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจ†เจ‰เจ‚เจฆเฉ‡ เจนเจจ, เจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจ†เจฐเจกเจฐ เจฆเฉเจ†เจฐเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ timestamp เจธเฉเจจเฉ‡เจนเฉ‡เฅค

เจธเฉเจจเฉ‡เจนเฉ‡ เจชเฉœเฉเจน เจฐเจนเฉ‡ เจนเจจ

เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฌเจฒเจพเจ•เจšเฉˆเจจ เจคเฉ‹เจ‚ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ เจœเฉ‹ เจชเฉเจฐเจพเจชเจคเจ•เจฐเจคเจพ เจจเฉ‚เฉฐ เจญเฉ‡เจœเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚ เจฌเจฃเจพเจ‡เจ† เจนเฉˆ api/chatrooms.

เจธเจพเจฐเฉ‡ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจนเจฐ เจ•เจฟเจธเฉ‡ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเจจ - เจคเฉเจธเฉ€เจ‚ เจเจจเจ•เฉเจฐเจฟเจชเจŸเจก เจธเฉเจจเฉ‡เจนเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจชเจฐ เจ•เฉ‡เจตเจฒ เจชเฉเจฐเจพเจชเจคเจ•เจฐเจคเจพ เจ†เจชเจฃเฉ€ เจจเจฟเฉฑเจœเฉ€ เจ•เฉเฉฐเจœเฉ€ เจ…เจคเฉ‡ เจญเฉ‡เจœเจฃ เจตเจพเจฒเฉ‡ เจฆเฉ€ เจœเจจเจคเจ• เจ•เฉเฉฐเจœเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจกเฉ€เจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ:

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

เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจ•เฉ€?

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเฉเจจเฉ‡เจนเฉ‡ เจฒเจ—เจญเจ— 5 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เจธ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจกเจฟเจฒเฉ€เจตเจฐ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ - เจ‡เจน เจ‰เจน เจธเจฎเจพเจ‚ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจฌเจฒเจพเจ• เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ - เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ•เจฒเจพเจ‡เฉฐเจŸ-เจŸเฉ‚-เจจเฉ‹เจก เจ…เจคเฉ‡ เจจเฉ‹เจก-เจŸเฉ‚-เจจเฉ‹เจก เจธเจพเจ•เจŸ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจฒเฉˆ เจ•เฉ‡ เจ†เจ เจนเจพเจ‚เฅค เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจจเฉ‹เจก เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจน เจ‡เจธเจฆเฉ€ เจตเฉˆเจงเจคเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจฆเฉ‚เจœเฉ‡ เจจเฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฆเจพ เจนเฉˆเฅค เจธเจนเจฟเจฎเจคเฉ€ เจฌเจฃเจจ เจ…เจคเฉ‡ เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ—เจพเจนเจ•เจพเจ‚ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเฉˆเฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ…เจธเฉ€เจ‚ เจฐเฉˆเจ—เฉ‚เจฒเจฐ เจ‡เฉฐเจธเจŸเฉˆเจ‚เจŸ เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐเจพเจ‚ เจตเจพเจ‚เจ—, เจคเฉเจฐเฉฐเจค เจธเฉฐเจฆเฉ‡เจธเจผ เจชเจนเฉเฉฐเจšเจพเจตเจพเจ‚เจ—เฉ‡เฅค

เจเจกเจฐเฉˆเฉฑเจธ เจฌเฉเฉฑเจ• เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ•เฉ‡เจตเฉ€เจเจธ - เจ•เฉ€-เจตเฉˆเจฒเจฏเฉ‚ เจธเจŸเฉ‹เจฐเฉ‡เจœ - เจ‡เจน เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจ•เจฟเจธเจฎ เจฆเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš asset เจ‡เจน NaCl-เจฌเจพเจ•เจธ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเฉ‹ เจเจจเจ•เฉเจฐเจฟเจชเจŸเจก เจนเฉˆ, เจชเจฐ NaCl-เจธเฉ€เจ•เฉเจฐเฉ‡เจŸเจฌเจพเจ•เจธ. เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจฆเฉ‚เจœเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจซเจพเจˆเจฒ/เจšเจฟเฉฑเจคเจฐ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ…เจคเฉ‡ เจธเจฎเฉ‚เจน เจšเฉˆเจŸเจพเจ‚ เจฒเจˆ เจ…เจœเฉ‡ เจตเฉ€ เจฌเจนเฉเจค เจ•เฉฐเจฎ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจ—เจฒเจคเฉ€-เจ…เจคเฉ‡-เจ—เจฒเจคเฉ€ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจ‡เจธ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ "เจฌเจฆเจฒเจฟเจ†" เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ เจ…เจธเฉ€เจ‚ เจ‰เจธเฉ‡ เจชเฉฑเจงเจฐ เจฆเฉ€ เจ—เฉ‹เจชเจจเฉ€เจฏเจคเจพ เจจเฉ‚เฉฐ เจฌเจฐเจ•เจฐเจพเจฐ เจฐเฉฑเจ–เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจนเจพเจ‚, เจ…เจœเฉ‡ เจตเฉ€ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจฌเจพเจ•เฉ€ เจนเฉˆ - เจ†เจฆเจฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡, เจ…เจธเจฒ เจ—เฉ‹เจชเจจเฉ€เจฏเจคเจพ เจ‡เจน เจฎเฉฐเจจเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจœเจจเจคเจ• เจจเฉˆเจŸเจตเจฐเจ• เจจเฉ‹เจกเจพเจ‚ เจจเจพเจฒ เจจเจนเฉ€เจ‚ เจœเฉเฉœเจจเจ—เฉ‡, เจชเจฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจฃเจ—เฉ‡. เจคเฉเจนเจพเจกเฉ‡ เจตเจฟเจšเจพเจฐ เจตเจฟเฉฑเจš เจ•เจฟเฉฐเจจเฉ‡ เจชเฉเจฐเจคเฉ€เจธเจผเจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ‡เจน เจ•เจฐเจฆเฉ‡ เจนเจจ? เจ‡เจน เจธเจนเฉ€ เจนเฉˆ, 0. เจ…เจธเฉ€เจ‚ เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจฆเฉ‡ เจŸเฉ‹เจฐ เจธเฉฐเจธเจ•เจฐเจฃ เจจเจพเจฒ เจ‡เจธ เจฎเฉเฉฑเจฆเฉ‡ เจจเฉ‚เฉฐ เจ…เฉฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจนเฉฑเจฒ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจธเฉ€เฅค

เจ…เจธเฉ€เจ‚ เจธเจพเจฌเจค เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ เจฌเจฒเจพเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฆเฉ‚เจค เจฎเฉŒเจœเฉ‚เจฆ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ. เจชเจนเจฟเจฒเจพเจ‚, 2012 เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจ•เฉ‹เจธเจผเจฟเจธเจผ เจธเฉ€ - เจฌเจฟเฉฑเจŸเจฎเฉˆเจธเฉ‡เจœ, เจœเฉ‹ เจฒเฉฐเจฌเฉ‡ เจธเฉเจจเฉ‡เจนเฉ‡ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจธเจฎเฉ‡เจ‚, CPU เจฒเฉ‹เจก, เจ…เจคเฉ‡ เจฎเฉ‹เจฌเจพเจˆเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจ˜เจพเจŸ เจ•เจพเจฐเจจ เจ…เจธเจซเจฒ เจฐเจฟเจนเจพเฅค

เจ…เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจนเจตเจพเจฆ เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจ•เจพเจฐเจจ เจนเฉˆ เจ•เจฟ เจฌเจฒเฉŒเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจฎเฉˆเจธเฉ‡เจ‚เจœเจฐ เจ†เจชเจฃเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ…เฉฑเจ—เฉ‡ เจนเจจ - เจฒเฉ‹เจ• เจ†เจชเจฃเฉ‡ เจ–เจพเจคเฉ‡ เจฆเฉ€ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐเฉ€ เจฒเฉˆเจฃ เจฒเจˆ เจคเจฟเจ†เจฐ เจจเจนเฉ€เจ‚ เจนเจจ, เจจเจฟเฉฑเจœเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเจพ เจฎเจพเจฒเจ• เจนเฉ‹เจฃเจพ เจ…เจœเฉ‡ เจ‡เฉฑเจ• เจฐเฉเจเจพเจจ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ…เจคเฉ‡ เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€ เจฌเจฒเฉŒเจ•เจšเฉˆเจจ 'เจคเฉ‡ เจ‰เฉฑเจš เจ—เจคเฉ€ เจฆเฉ€ เจ†เจ—เจฟเจ† เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค เจธเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ‡ เจนเฉ‹เจฐ เจคเจ•เจจเฉ€เจ•เฉ€ เจเจจเจพเจฒเจพเจ— เจ…เฉฑเจ—เฉ‡ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจฃเจ—เฉ‡เฅค เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ–เฉ‹เจ—เฉ‡เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹