Как создать общий 128-битный ключ AES-GCM с помощью ECDH?JAVA

Программисты JAVA общаются здесь
Anonymous
Как создать общий 128-битный ключ AES-GCM с помощью ECDH?

Сообщение Anonymous »

Учитывая предоставленный открытый ключ, плюс мой собственный закрытый ключ, как мне генерировать «общий 128-битный ключ AES-GCM ... с использованием ECDH», используя что-то подходящее для JVM и /или Android? Частично это включает в себя «соглашение ключей», описанное как: < /p>

Клиент и транспортное средство получают общий 128-битный ключ AES-GCM с использованием ECDH: < /p>

Код: Выделить всё

S = (Sx, Sy) = ECDH(c, V) = ECDH(v, C)
K = SHA1(BIG_ENDIAN(Sx, 32))[:16]
< /code>
< /blockquote>
Я использую эту библиотеку Kotlin для доступа к API флота. Эта библиотека специально не реализует приведенный выше алгоритм. Вместо этого потребители своей библиотеки должны предоставить его сами, в форме реализации SharedSecretfetcher < /code>: < /p>

SharedSecretFetcher< /code> ... принимает открытый ключ транспортного средства, который предоставит SDK, и требуется, что вы используете это для возврата шестнадцатеричного дигеста SHA1 Sha1 Share Secret.val sharedSecretFetcher = { vehiclePublicKey ->
/** A pseudocode example:
val ecdh = createECDH(curveName = "p256")
ecdh.setPrivateKey(YOUR_CLIENT_PRIVATE_KEY)
val sharedSecret = ecdh.computeSecretAsHex(vehiclePublicKey)
sharedSecret.sha1Hash().toHex()
*/
}
Примечательно, что реализация createecdh () и computesrecretashex () остается в качестве упражнения для читателя. Пример кода нет, и я не определил потребителя этой библиотеки. < /P>
Tesla показывает, что использует OpenSSL в командной строке для этого: < /p>

Код: Выделить всё

export K=$(openssl pkeyutl -derive -inkey client.key -peerkey vehicle.pem \
| openssl dgst -sha1 -binary \
| head -c 16 \
| xxd -p)
echo $K
1b2fce19967b79db696f909cff89ea9a
Я также вижу этот Javascript и этот питон, который, кажется, реализует этот алгоритм. Java/Kotlin Friendy для достижения того же.

Подробнее здесь: https://stackoverflow.com/questions/795 ... using-ecdh

Вернуться в «JAVA»