Tôi đang phát triển chữ ký số phân phối ký một tài liệu và gửi nó qua mạng đến Máy chủ ứng dụng. Tôi đang sử dụng lập trình socket trong java để thực hiện. Tôi nghĩ rằng khóa công khai nên được mã hóa hoặc nén tức là giá trị x và y bằng cách nào đó được biểu diễn dưới dạng dữ liệu nhị phân đơn và được lưu trong đăng ký hoặc mạng công cộng. Nhưng tôi không biết cách thực hiện trong java.Làm cách nào để tôi nén hoặc mã hóa khóa công khai đường cong Elliptic và đặt nó qua mạng?
// I have class like this
public class CryptoSystem{
EllipticCurve ec = new EllipticCurve(new P192());
//-------------------
//--------------------
public ECKeyPair generatekeyPair()
{
return ECKeyPair(ec);
}
}
// i don't think i have problem in the above
CryptoSystem crypto = new CryptoSystem();
ECKeyPair keyPair = crypto.generateKeyPair();
BigInteger prvKey = keyPair.getPrivateKey();
ECPoint pubKey = keyPair.getPublicKey();
// recommend me here to compress and send it the public key to a shared network.
Tôi muốn biết làm thế nào để mã hóa phím và miền thông số công cộng, do đó người xác minh của chữ ký sẽ giải mã nó để sử dụng it.because khi bạn gửi cho họ trên mạng để người xác minh u gonna phải mã hóa như là một mảng byte đơn.i không sử dụng Bouncy Castle Provider. Việc thực thi toàn bộ thuật toán ECDSA là dự án của tôi là
Làm thế nào để bạn đại diện cho họ trong bộ nhớ? Họ là số nguyên chỉ lớn, serializing họ nên dễ dàng. – CodesInChaos
Bạn muốn sử dụng nén điểm? Đó là một kỹ thuật mà bạn chỉ tuần tự hóa tọa độ x và dấu của toạ độ y, và sau đó sử dụng phương trình đường cong để khôi phục toạ độ y. – CodesInChaos
có, nhưng ngoài nén tôi muốn đặt nén khóa công khai trong mạng đăng ký chia sẻ vì vậy hai hoặc nhiều máy chủ ứng dụng sẽ sử dụng nó để xác minh chữ ký –