Перво-наперво,
БЕЗОПАСНОСТИ ПРЕДУПРЕЖДЕНИЕ:
Я прекрасно понимаю, что если я использую частно-шифрование -> общественно-дешифровке «зашифрованы» сообщение является читаемый для всех, кто имеет доступ к так называемому «открытому ключу».
В нормальном случае использования rsa это было бы фатально!
Но в моем случае «открытый ключ» также должен быть закрытым.
Я пытаюсь установить зашифрованное соединение, где полный контроль остается на одной стороне.
Один из партнеров не доверен, и если он подвергнется риску, я хочу быть уверенным, что никто другой не сможет использовать интерфейс (чтобы предотвратить эскалацию привилегий).
Как вы можете видеть в этом случае, шифрование само по себе не является основной причиной асимметричного «шифрования».
Фактически вы получаете зашифрованный поток данных, который нельзя манипулировать со стороны третьей стороны, даже если ключ просочился.
Мое фактическое сообщение должно выполняться между узлом node.js и средой python.
URSA Узел lib уже имеет функцию для частного шифрования.
К сожалению pyCrypto не поддерживает это по причинам, упомянутым выше ранее.
Я уже пытался сыром lib и использовал частный экспонент для создания объекта открытого ключа, но nodejs не может расшифровать результат (не большой сюрприз).
Кто-нибудь знает, как решить эту проблему?
Есть ли другой способ заставить python делать фактическое шифрование секретного ключа?
Может быть, есть еще один python lib, способный сделать это, я не мог найти?
Или, возможно, его можно получить, чтобы nodejs lib расшифровывал мое шифрование секретного ключа cheesie?питон RSA частного шифровать общаются с node.js
ответ
Я нашел для меня рабочее решение.
Я просто взломал дополнительный метод в объекте подписи pyCrypto, который делает именно то, что я хочу.
Это работает с python 2.7.9 и 3.4, насколько я его протестировал.
В файле "[...]/Crypto/Signature/PKCS1_v1_5.py"
класс "PKCS115_SigScheme"
Я просто добавил следующий метод:
def private_encrypt(self, msg):
modBits = Crypto.Util.number.size(self._key.n)
k = ceil_div(modBits,8) # Convert from bits to bytes
PS = bchr(0xFF) * (k - len(msg) - 3)
m = self._key.decrypt(b("\x00\x01") + PS + bchr(0x00) + msg)
S = bchr(0x00)*(k-len(m)) + m
return S
Это просто манипулируют копия функции «знак».
Использование выглядит следующим образом:
from Crypto.Signature import PKCS1_v1_5
from Crypto.PublicKey import RSA
plain_message="Hi, I'm going to be encrypted with a private key."
key = RSA.generate(4096)
signer = PKCS1_v1_5.new(key)
bin_enc_msg = signer.private_encrypt(plain_message.encode())
дешифрования после base64 кодированные передачи в nodejs с URSA publicDecrypt работает отлично.
Это должно быть ясно из импорта, но я хочу упомянуть об этом, тем не менее:
Это фактически шифруется с помощью PKCS1.5 padded rsa.
Другим решением было бы сочетание симметричного шифрования с асимметричным подписями для проверки, но для этого потребуются дополнительные усилия и сложность, которые я не хочу или не нуждаюсь.
Если ваша цель - подключить среду python и Node.js с шифрованием и не требует использования сторонней проверки, вам нужно использовать шифрование с открытым ключом RSA? Это действительно похоже на то, что вы пытаетесь выполнить, это Symmetric-key Encryption, и вы можете использовать AES. Библиотека pyCrypto уже поддерживает это, и некоторые поисковые системы предоставляют this библиотеку для Node.js на git-хабе.
Прошу прощения, но это именно то, чего я не хочу. Если кто-то получит пароль симметричного шифрования, он может расшифровать и обработать и переконфигурировать сообщение. Это то, что я пытаюсь предотвратить. –
Вы можете посмотреть [pyOpenSSL] (https://pypi.python.org/pypi/pyOpenSSL), в котором есть инструменты для шифрования открытого ключа PKI/private. Я бы сказал, если вы настроите свою среду на каждом сервере, который делает PKI, например, установку для двухсторонней связи, и не используйте сторонние сертификаты, вы открыты для атак MITM, а управление сертификатами - это боль. –
У меня такое чувство, что никто не понимает, что я пытаюсь описать. вероятно, моя вина. Обмен открытым ключом безопасно осуществляется над защищенным каналом и постоянно сохраняется в файл на клиенте. После этого я использую эту технику именно потому, что она не уязвима для MITM. И btw pyopenssl вообще не поддерживает шифрование privatekey. –
- 1. питон RSA РЕАЛИЗАЦИЯ с PKCS1
- 2. шифровать и дешифровать строку текста с RSA и des3 ключом
- 3. шифровать и дешифровать с RSA OAEP
- 4. Шифровать длинную строку с RSA (Java)
- 5. Расшифровка RSA без частного экспонента
- 6. RSA-поиск частного ключа D
- 7. Поиск частного ключа в RSA
- 8. Android RSA и node.js Шифрование/дешифрование RSA
- 9. node.js шифрования RSA/дешифрование
- 10. RSA Algorithm (вычисление частного ключа) в bash
- 11. шифровать/расшифровывать пароли с помощью node.js
- 12. Как шифровать расшифровывать с ключами RSA в Java
- 13. Как шифровать данные с помощью закрытого ключа RSA в python?
- 14. Шифровать закрытый ключ DSA с открытым ключом RSA
- 15. Как шифровать/расшифровывать более крупный файл с помощью RSA/AES
- 16. шифровать длинный текстовую строку с использованием шифрования RSA только
- 17. Как шифровать (и расшифровывать) данные с помощью pycrypto и RSA?
- 18. Как шифровать несколько файлов с помощью RSA в C
- 19. Шифровать данные с открытым ключом RSA, не дающим ожидаемых результатов
- 20. расшифровывать/шифровать большие объемы данных, используя RSA с открытым ключом
- 21. Как шифровать данные с помощью открытого ключа rsa в php
- 22. Node.js правильный способ сделать rsa шифрование?
- 23. Почему node.js нужен питон
- 24. Как шифровать с закрытым ключом и расшифровывать с открытым ключом в C# RSA
- 25. Аутентификация SFTP с использованием частного ключа RSA в libcurl
- 26. Импорт частного ключа RSA, сгенерированного с помощью GnuPG в C#
- 27. Шифровать сообщение с помощью закрытого ключа?
- 28. функция ошибок для модуля питон-RSA
- 29. как потоки общаются с афорами?
- 30. служба работников общаются с клиентами
Как вы оценили реализацию 'private_encrypt'? – Kedar
Я посмотрел, как должно работать подпись. Я в основном просто подписываю данные, но вместо хэша я использую свои фактические данные. И для некоторых подробностей я рассмотрел, как ursa node.js lib расшифровывает данные и что они ожидают. –