xray x25519: Как получить publicKey из вывода команды
Узнайте, как извлечь publicKey из вывода команды xray x25519. Пошаговые инструкции с примерами кода для преобразования приватного ключа в публичный с помощью OpenSSL и Python.
Как извлечь publicKey из вывода команды xray x25519?
Я пытаюсь использовать команду xray x25519 для генерации пары ключей (privateKey и publicKey), но команда возвращает три значения: PrivatKey, Password и Hash32. Как правильно использовать эти данные для получения публичного ключа?
Команда xray x25519 генерирует X25519 ключевой пара для использования в XRay, но публичный ключ не отображается напрямую в выводе. Для извлечения публичного ключа необходимо использовать приватный ключ с помощью специализированных инструментов или команд, так как XRay возвращает приватный ключ, пароль и хеш, но оставляет преобразование в публичный ключ на усмотрение пользователя.
Содержание
- Что возвращает команда xray x25519?
- Как извлечь публичный ключ из приватного?
- Практические примеры использования
- Инструменты для работы с ключами
- Настройка XRay с сгенерированными ключами
Что возвращает команда xray x25519?
Команда xray x25519 генерирует криптографически безопасный X25519 ключевой пару, но её вывод содержит три основных компонента:
- PrivateKey - приватный ключ в формате base64
- Password - сгенерированный пароль для шифрования
- Hash32 - 32-байтный хеш, используемый для идентификации ключа
Важно понимать, что публичный ключ X25519 вычисляется из приватного ключа по криптографическому алгоритму, поэтому он не отображается напрямую в выводе. Это стандартная практика в криптографии, где публичный ключ представляет собой результат математического преобразования приватного ключа.
Примечание: X25519 (также известный как Curve25519) - это эллиптическая кривая, используемая для обмена ключами в протоколах шифрования. Приватный ключ - это случайное число, а публичный ключ - результат умножения этого числа на базовую точку кривой.
Как извлечь публичный ключ из приватного?
Для преобразования приватного ключа в публичный существует несколько методов:
1. Использование специализированных инструментов
# Использование openssl для преобразования приватного ключа в публичный
echo "YOUR_PRIVATE_KEY_BASE64" | base64 -d | xxd -p -c 32 | \
openssl pkey -inform der -pubout -outform pem
2. Использование Python с библиотекой cryptography
from cryptography.hazmat.primitives.asymmetric import x25519
from cryptography.hazmat.primitives import serialization
import base64
# Декодируем приватный ключ из base64
private_key_bytes = base64.b64decode("YOUR_PRIVATE_KEY_BASE64")
# Создаем объект приватного ключа
private_key = x25519.X25519PrivateKey.from_private_bytes(private_key_bytes)
# Получаем публичный ключ
public_key = private_key.public_key()
# Сериализуем публичный ключ в формат PEM
public_key_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
print(public_key_pem.decode())
3. Использование командной строки с xxd и openssl
# Преобразование base64 приватного ключа в бинарный формат
echo "YOUR_PRIVATE_KEY_BASE64" | base64 -d > private_key.bin
# Извлечение публичного ключа
openssl pkey -in private_key.bin -inform der -pubout
Практические примеры использования
Пример 1: Полный цикл генерации и преобразования
# 1. Генерация ключевой пары
xray x25519
# Вывод будет содержать:
# PrivateKey: base64-encoded-private-key
# Password: generated-password
# Hash32: hash32-value
# 2. Сохранение приватного ключа
echo "YOUR_PRIVATE_KEY_BASE64" > private.key
# 3. Преобразование в публичный ключ с помощью Python
python3 -c "
import base64
from cryptography.hazmat.primitives.asymmetric import x25519
from cryptography.hazmat.primitives import serialization
private_key_b64 = 'YOUR_PRIVATE_KEY_BASE64'
private_key_bytes = base64.b64decode(private_key_b64)
private_key = x25519.X25519PrivateKey.from_private_bytes(private_key_bytes)
public_key = private_key.public_key()
public_key_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
print(public_key_pem.decode())
"
Пример 2: Автоматизация процесса
#!/bin/bash
# Генерация ключей
KEYS=$(xray x25519)
PRIVATE_KEY=$(echo "$KEYS" | grep "PrivateKey:" | cut -d' ' -f2)
# Извлечение публичного ключа
PUBLIC_KEY=$(echo "$PRIVATE_KEY" | base64 -d | xxd -p -c 32 | \
openssl pkey -inform der -pubout -outform pem)
echo "Приватный ключ:"
echo "$PRIVATE_KEY"
echo ""
echo "Публичный ключ:"
echo "$PUBLIC_KEY"
Инструменты для работы с ключами
1. Стандартные инструменты Linux
- openssl - универсальный инструмент для работы с криптографией
- xxd - для преобразования между текстом и бинарными данными
- base64 - для кодирования/декодирования base64
2. Python библиотеки
- cryptography - современная библиотека для криптографических операций
- pyopenssl - обертка над OpenSSL для Python
3. Специализированные утилиты
- wg (WireGuard) - может работать с X25519 ключами
- keyctl - для управления ключами в ядре Linux
Пример использования библиотеки cryptography:
from cryptography.hazmat.primitives.asymmetric import x25519
from cryptography.hazmat.primitives import serialization
import base64
import os
def generate_x25519_keypair():
"""Генерация X25519 ключевой пары"""
private_key = x25519.X25519PrivateKey.generate()
public_key = private_key.public_key()
# Сериализация ключей
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
return private_pem, public_pem
# Использование
private_key, public_key = generate_x25519_keypair()
print("Приватный ключ:\n", private_key.decode())
print("Публичный ключ:\n", public_key.decode())
Настройка XRay с сгенерированными ключами
После извлечения публичного ключа его можно использовать в конфигурации XRay:
Пример конфигурации XRay:
{
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "YOUR_USER_ID",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none",
"fallbacks": [
{
"dest": 80
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"certificates": [
{
"certificateFile": "server.crt",
"keyFile": "server.key"
}
]
},
"xtlsSettings": {
"minVersion": "1.2",
"preferServerCipherSuites": true,
"certificates": [
{
"certificateFile": "server.crt",
"keyFile": "server.key"
}
]
}
}
}
],
"outbounds": [
{
"protocol": "freedom"
}
]
}
Интеграция с WireGuard совместимыми ключами:
Если вам нужна совместимость с WireGuard, формат ключей будет другим:
# Преобразование X25519 ключей в формат WireGuard
wg genkey | tee privatekey | wg pubkey > publickey
Заключение
-
Команда
xray x25519не возвращает публичный ключ напрямую - она генерирует приватный ключ, пароль и хеш, оставляя вычисление публичного ключа на усмотрение пользователя. -
Для извлечения публичного ключа необходимо использовать криптографические библиотеки или инструменты, такие как OpenSSL, которые могут выполнить математическое преобразование приватного ключа в публичный.
-
Наиболее удобный способ - использование Python с библиотекой
cryptography, которая предоставляет простые методы для работы с X25519 ключами. -
Публичный ключ X25519 всегда имеет длину 32 байта и может быть представлен в различных форматах: base64, PEM, hex или бинарном.
-
Для автоматизации процесса рекомендуется создать скрипт, который будет выполнять генерацию ключей и их преобразование в один шаг.