Клиент и транспортное средство получают общий 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()
*/
}
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
Подробнее здесь: https://stackoverflow.com/questions/795 ... using-ecdh