CRYPTO.MN
Гарын үсэг

ECDSA

ECDSA нь эллиптик муруйн криптографид суурилсан тоон гарын үсгийн алгоритм бөгөөд мэдээллийн бүрэн бүтэн байдал болон гарын үсгийн хүчинтэй эсэхийг шалгахад ашиглагддаг.

Стандарт
FIPS 186-5
Digital Signature Standard
Түлхүүрийн урт
Муруйгаас хамаарна: P-256, P-384, secp256k1
Nonce-ийн урт
Муруйн бүлгийн хэмжээнээс хамаарна

Чухал анхааруулга

  • ECDSA-ийн хамгийн чухал эрсдэлийн нэг нь nonce-ийн буруу хэрэглээ юм.
  • Nonce-ийг давтан ашиглахгүй: ижил хувийн түлхүүрээр хоёр өөр мессежид ижил nonce ашиглавал хувийн түлхүүрийг тооцоолж гаргах боломж үүсэж болно.
  • Nonce-ийг таамаглах боломжтойгоор үүсгэхгүй: сул санамсаргүй үүсгүүр эсвэл хангалтгүй entropy нь гарын үсгийн аюулгүй байдлыг алдагдуулж болно.
  • Найдвартай сан ашиглах: nonce-ийг криптографийн баталгаатай сан эсвэл стандартчилагдсан deterministic nonce үүсгэх аргаар гаргана.
  • Хувийн түлхүүрийг хамгаалах: хувийн түлхүүр алдагдвал халдагч хүчинтэй гарын үсэг үүсгэж чадна.
  • Квантын эрсдэл: хангалттай хүчин чадалтай квант компьютер Shor-ийн алгоритмыг хэрэгжүүлж чадвал ECDSA-ийн аюулгүй байдлын үндсийг эвдэх боломжтой.
  • ECDSA нь пост-квант алгоритм биш.
  • Гарын үсгийн форматыг зөв шалгах: гарын үсгийн кодчилол, муруйн параметр болон хэш функц нь протоколын шаардлагад нийцсэн байх ёстой.

Юу вэ?

Elliptic CuECDSA (Elliptic Curve Digital Signature Algorithm) нь эллиптик муруйн криптографид суурилсан тоон гарын үсгийн алгоритм юм. Энэ нь FIPS 186-5 зэрэг стандартад тодорхойлогддог.

ECDSA-ийн зорилго нь мэдээллийн бүрэн бүтэн байдлыг шалгах, мөн гарын үсэг нь тухайн нийтийн түлхүүрт харгалзах хувийн түлхүүрээр үүссэн эсэхийг баталгаажуулах явдал юм.

ECDSA нь хоёр түлхүүр ашигладаг: - Private Key: тоон гарын үсэг үүсгэхэд ашигладаг нууц түлхүүр. - Public Key: гарын үсгийг шалгахад ашигладаг нийтийн түлхүүр. Гарын үсэг үүсгэхдээ мессежийн хэш, хувийн түлхүүр болон nonce буюу гарын үсэг бүрд ашиглах түр нууц тоог ашиглана. Nonce нь нууц байх ёстой бөгөөд нэг хувийн түлхүүрийн хүрээнд дахин ашиглагдах, эсвэл таамаглах боломжтойгоор үүсэх нь хувийн түлхүүрийг ил гаргах эрсдэлтэй.

ECDSA нь өгөгдлийг шууд шифрлэдэггүй. RSA-PSS болон Ed25519-ийн нэгэн адил тоон гарын үсэг үүсгэх, шалгах зориулалттай боловч эллиптик муруйн математик бүтэц ашигладгаараа ялгаатай.rve Digital Signature Algorithm — эллиптик муруй дээр суурилсан гарын үсгийн стандарт.

Хэрхэн ажилладаг вэ?

ECDSA нь эллиптик муруйн математик үйлдэлд тулгуурлан гарын үсэг үүсгэж, нийтийн түлхүүрээр шалгадаг.

1. Түлхүүрийн хос үүсгэх

Криптографийн зориулалттай санамсаргүй үүсгүүрээр хувийн түлхүүр үүсгэж, түүнд харгалзах нийтийн түлхүүрийг тооцоолно.

2. Мессежийн хэш тооцоолох

Гарын үсэг зурах мэдээллийг SHA-256 зэрэг хэш функцээр боловсруулна. Гарын үсгийн тооцоололд эх мэдээллийн оронд хэшийн утга оролцдог.

3. Nonce үүсгэх

Гарын үсэг бүрд шаардлага хангасан нууц түр утга үүсгэнэ. Энэ утга нь криптографийн хувьд урьдчилан таамаглах боломжгүй, тухайн хувийн түлхүүрийн хүрээнд давтагдаагүй байх ёстой. Зарим хэрэгжүүлэлт nonce-ийг тодорхойлогдсон аргаар үүсгэж болно.

4. Гарын үсэг үүсгэх

ECDSA нь хувийн түлхүүр, мессежийн хэш болон nonce-ийг ашиглан хоёр бүрэлдэхүүнтэй тоон гарын үсэг үүсгэнэ. Эдгээрийг ихэвчлэн (r) болон (s) гэж тэмдэглэдэг.

5. Гарын үсгийг шалгах

Хүлээн авагч мессеж, гарын үсэг болон нийтийн түлхүүрийг ашиглан шалгалт хийнэ. Мессеж өөрчлөгдсөн эсвэл гарын үсэг буруу бол шалгалт амжилтгүй болно.

6. Үр дүнг баталгаажуулах

Гарын үсэг хүчинтэй байх нь тухайн нийтийн түлхүүртэй холбоотой хувийн түлхүүр ашиглагдсаныг батална. Харин түлхүүр яг хэнийх болохыг тогтоохын тулд сертификат эсвэл өөр итгэмжлэгдсэн баталгаажуулалт шаардлагатай.

Хаана ашиглагддаг вэ?

  • Bitcoin Bitcoin нь secp256k1 эллиптик муруйг ашигладаг. ECDSA нь Bitcoin-ийн уламжлалт гүйлгээний гарын үсэгт ашиглагддаг бөгөөд гүйлгээ тухайн хувийн түлхүүрийн эзэмшигчийн зөвшөөрөлтэй эсэхийг баталгаажуулахад оролцдог. Bitcoin-ийн зарим орчин үеийн гарын үсэгт Schnorr алгоритм ашигладаг. Ethereum болон блокчейн системүүд Ethereum нь secp256k1 муруйд суурилсан ECDSA-г гүйлгээний гарын үсэг болон илгээгчийн хаягийг тодорхойлох үйл явцад ашигладаг. TLS болон X.509 сертификат ECDSA нь TLS холболтод гарын үсэг үүсгэх болон X.509 сертификатын гарын үсгийг шалгахад ашиглагдаж болно. Бодит хэрэглээ нь протоколын хувилбар
  • сертификат болон түлхүүрийн тохиргооноос хамаарна. Программ хангамжийн гарын үсэг ECDSA нь программын багц
  • шинэчлэлт болон бусад дижитал артефактын бүрэн бүтэн байдлыг баталгаажуулахад ашиглагдаж болно. Хязгаарлагдмал нөөцтэй төхөөрөмжүүд ECC-д суурилсан түлхүүрүүд харьцангуй богино байдаг тул ECDSA нь санах ой
  • зурвас болон тооцооллын нөөц хязгаарлагдмал орчинд тохиромжтой байж болно.

Түгээмэл алдаа

  • Nonce-ийг давтан ашиглах: хувийн түлхүүрийг алдагдуулах эрсдэлтэй.
  • Math.random() ашиглах: криптографийн түлхүүр болон nonce үүсгэхэд тохиромжгүй.
  • ECDSA-г шифрлэлтийн алгоритм гэж ойлгох: энэ нь гарын үсэг үүсгэх болон шалгах зориулалттай.
  • Нийтийн түлхүүрийн эзэмшигчийг баталгаажуулахгүй байх: хүчинтэй гарын үсэг нь түлхүүрийн эзэмшигчийн бодит таних тэмдгийг дангаараа батлахгүй.
  • Муруйн төрлийг андуурах: P-256 болон secp256k1 нь өөр өөр муруйн параметртэй тул хооронд нь шууд сольж ашиглаж болохгүй.
  • Квантын аюулгүй гэж үзэх: ECDSA нь сонгодог криптографийн арга.
  • Гарын үсгийн формат болон параметрийг үл тоомсорлох: өөр өөр системийн гарын үсгийн кодчилол, хэш болон муруйн шаардлагыг нийцүүлэх хэрэгтэй.

Жишээ код

JavaScript
import {
  generateKeyPairSync,
  sign,
  verify,
} from "node:crypto";

// ECDSA түлхүүрийн хос үүсгэх
const { publicKey, privateKey } = generateKeyPairSync("ec", {
  namedCurve: "prime256v1", // NIST P-256
});

const message = Buffer.from("Hello, ECDSA!");

// Гарын үсэг үүсгэх
const signature = sign("sha256", message, privateKey);

// Гарын үсэг шалгах
const isValid = verify(
  "sha256",
  message,
  publicKey,
  signature
);

console.log("Signature valid:", isValid);

Гарын үсэг ангилалын бусад алгоритм