AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.02.2023, 14:32   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Шифрование в dax2012
Вопрос не мой, транслирую "как сформировали" (без понимания смысла). Поэтому на уточняющие вопросы могу отвечать с задержкой


Есть массив паролей (несколько десятков тысяч) они лежат в таблице Dax2012. Их нужно зашифровать.

Использование стандарта ограничено тем что использование WinAPIServer::cryptProtectData()и WinAPServer::cryptUnprotectData() подразумевает что ключ лежит в реестре на сервере АОС а серверов более 80. То есть необходимо хранить 80 экземпляров зашифрованного пароля для каждого АОС.

Вопрос:
  1. какие могут быть варианты хранения ключей.
  2. какие могут быть вообще варианты организации шифрования
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 10.02.2023, 14:37   #2  
axm2017 is offline
axm2017
Участник
 
1,890 / 295 (13) ++++++
Регистрация: 15.05.2017
Шифровать для чего?
Правильно хранить пароль в виде результата хэш функции.
Пользователь вводит пароль к нему применяют хэш функцию и сравнивают с хранимым. В таком случае даже при попадании базы в чужие руки все ок.
Старый 10.02.2023, 15:22   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
В нашем случае хранение хеш не подойдет, потому что использование хеш предполагает из пароля создать хеш и сравнить его с тем что сохранено.

Мне нужно шифровать - дешифровать. То есть восстанавливать из того что хранится, то что сохраняли.

Возможно постановка "хранятся пароли" немного некорректный. Скорее так "хранится некая конфиденциальная информация"
Старый 10.02.2023, 15:37   #4  
axm2017 is offline
axm2017
Участник
 
1,890 / 295 (13) ++++++
Регистрация: 15.05.2017
Ок пусть храниться некая информация.
Мы ее шифруем/расшифровываем с помощью какого то алгоритма А
Вопрос где мы собираемся хранить/держать пароли (будет ли их пользователь вводить или как то иначе)?
Депонирование ключей нужно ли при этом?
Старый 10.02.2023, 16:52   #5  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
298 / 866 (29) +++++++
Регистрация: 23.10.2012
Добрый день.
Кто та сторона, что должна обладать расшифрованным паролем?
Вы рассматривали вариант с использованием сертификатов и открытых/закрытых ключей?
Старый 10.02.2023, 16:56   #6  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Если есть пара открытый-закрытый ключ, то можно попользоваться System.Security.Cryptography; наверное
Пример на C# нарыт в интернетах.

Вопрос - где надежно хранить закрытый ключ для дешифрования, в ресурс зашивать или в папке, в кторую имеет доступ только учетка AOS - ну такие себе варианты.

X++:
using System;
using System.Security.Cryptography;
using System.Text;

namespace RSAEncryptionExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string originalText = "Text to be encrypted";
            byte[] encryptedText;

            // Get the public key from a file
            string publicKey = File.ReadAllText("publickey.xml");

            // Create an instance of the RSA algorithm with the public key
            RSA rsa = RSA.Create();
            rsa.FromXmlString(publicKey);

            // Encrypt the original text using the RSA algorithm
            encryptedText = rsa.Encrypt(Encoding.UTF8.GetBytes(originalText), RSAEncryptionPadding.OaepSHA1);

            Console.WriteLine("Encrypted Text: " + Convert.ToBase64String(encryptedText));
        }
    }
}
Старый 10.02.2023, 17:46   #7  
axm2017 is offline
axm2017
Участник
 
1,890 / 295 (13) ++++++
Регистрация: 15.05.2017
Хранить можно как глобальную переменную в рамках сессии. Пользователь ввел пароль и далее живёт пока жива сессия.
Старый 10.02.2023, 17:49   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от axm2017 Посмотреть сообщение
Хранить можно как глобальную переменную в рамках сессии. Пользователь ввел пароль и далее живёт пока жива сессия.
Да, но опять же возникает вопрос, а зачем обычному пользователю знать пароль, например для доступа к Emarsys, с которым происходит обмен?
Даже если самим обменом занимается пакетная задача, то где тогда хранить этот пароль между запусками пакета?
Старый 10.02.2023, 17:55   #9  
axm2017 is offline
axm2017
Участник
 
1,890 / 295 (13) ++++++
Регистрация: 15.05.2017
Ему и не надо: ему надо ввести пароль чтобы получить доступ к табличке в которой зашифрованы данные для доступа к emarsys

Исхожу из того что пароль нельзя в открытом виде хранить в бд
Старый 13.02.2023, 16:16   #10  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
С регистрацией на сайте беда. Админов поймать невозможно, чтобы ускорить процесс. Поэтому работаю "почтальоном"

-------------------------------

Немного поясню:
  • Кластер DAX2012 (несколько десятков АОС).
  • Пакетное задание DAX (любой из этих АОС теоретически может быть назначен пакетным сервером) при выполнении обращается к неким внешним ресурсам, используя при этом логин и пароль.
  • Этих ресурсов несколько десятков.
То есть аксапта должна уметь расшифровать хранящийся пароль и передать его внешнему ресурсу при авторизации. Так как АОСов много, использовать стандартное шифрование мы не можем, так как ключ шифрования хранится в реестре сервера и нам нужно будет хранить для каждого АОСа свой экземпляр зашифрованного пароля.

Так вот в чем собственно вопрос:
  • каким образом организовывать шифрование-дешифрование
  • каким образом организовывать хранение и доступ к ключам шифрования
  • если кто то ткнет меня в ресурсы или в код будет вообще шикарно
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Вы рассматривали вариант с использованием сертификатов и открытых/закрытых ключей?
Мы рассматриваем любую приемлемую схему

Цитата:
Сообщение от axm2017 Посмотреть сообщение
Вопрос где мы собираемся хранить/держать пароли (будет ли их пользователь вводить или как то иначе)?
Атрибуты подключения будут заводится руками пользователем при регистрации связи с ресурсом.

Цитата:
Сообщение от axm2017 Посмотреть сообщение
Депонирование ключей нужно ли при этом?
Тут я не могу придумать сценарий когда это понадобится.
Старый 13.02.2023, 16:47   #11  
axm2017 is offline
axm2017
Участник
 
1,890 / 295 (13) ++++++
Регистрация: 15.05.2017
Хранить данные для доступа в зашифрованном симметричным алгоритмом виде в табличке.
При работе пакета сессия при запуске обращается к сетевому ресурсу (файл в сети с паролем расшифровки), доступ к которому есть только у пользователей группы пакетные задания/АОСы.
Старый 14.02.2023, 12:04   #12  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
298 / 866 (29) +++++++
Регистрация: 23.10.2012
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Есть массив паролей (несколько десятков тысяч) они лежат в таблице Dax2012. Их нужно зашифровать.
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
[*]каким образом организовывать хранение и доступ к ключам шифрования
Ощущение, что Вы "уперлись" в проблему созданную каким-то одним из множества вариантов решения бизнес-задачи (см. DDD). Как звучит бизнес задача?
Здесь Kerebros так и просится в качестве хранилища аутентификационных данных и инструмента для валидации.

Последний раз редактировалось Товарищ ♂uatr; 14.02.2023 в 12:08.
Старый 14.02.2023, 15:26   #13  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
  • Кластер DAX2012 (несколько десятков АОС).
  • Пакетное задание DAX (любой из этих АОС теоретически может быть назначен пакетным сервером) при выполнении обращается к неким внешним ресурсам, используя при этом логин и пароль.
  • Этих ресурсов несколько десятков.
То есть аксапта должна уметь расшифровать хранящийся пароль и передать его внешнему ресурсу при авторизации.
Так вот в чем собственно вопрос:
  • каким образом организовывать шифрование-дешифрование
  • каким образом организовывать хранение и доступ к ключам шифрования
Обычный подход в таких случаях следующий:
  • на любом хосте генерится экспортируемый (!) самоподписанный сертификат с использованием асимметричного алгоритма шифрования, такого как RSA или Diffie–Hellman (например, RSA2048), лучше всего со сроком действия лет на 100. В справке по развертыванию D365FO есть рекомендации по настройкам генерации сертификатов. Сгенерить сертификат можно с помощью PowerShell, см. New-SelfSignedCertificate
  • сам сертификат на хосте, где он сгенерирован, экспортируется с закрытым ключом в pfx-файл (скажем, с помощью MMC-оснастки Certificates), при этом закрытый ключ защищается паролем.
  • экспортированный сертификат с закрытым ключом на всех хостах, где им нужно будет что-то расшифровывать, импортируется в cert:\LocalMachine\My в терминах PowerShell (он же Computer\Personal в MMC-оснастке Certificates)
  • на закрытый ключ с помощью MMC-оснастки Certificates или с помощью PowerShell дается доступ на чтение той учетке или доменной группе, под которой запускаются сервисы AOS-ов. По умолчанию доступ будет только у LocalSystem, локального администратора и того, кто импортировал сертификат.
  • на открытом ключе сертификата зашифровываются приватные данные и сохраняются в базе или еще где, да хоть на сетевой шаре.
  • в коде, где нужно прочитать приватные данные, тому же RSACryptoServiceProvider говорится "расшифруй массив байт". Класс сам из зашифрованных данных извлекает отпечаток сертификата, сам запрашивает его закрытый ключ на хосте и расшифровывает данные (если что не так - будет исключение)
  • после использования расшифрованных данных не забыть выжечь их в оперативной памяти каленым железом, чтобы кто-нить дамп не снял
  • profit!
За это сообщение автора поблагодарили: Logger (3), LETTO (1), raz (10), S.Kuskov (10), sukhanchik (15), fed (10).
Старый 16.02.2023, 15:53   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от gl00mie Посмотреть сообщение
самоподписанный сертификат с использованием асимметричного алгоритма шифрования
Поправьте меня если я не прав, но на АОС для доступа к контейнеру с закрытым ключом нужен ПИН. А если так, то опять встает вопрос - как этот ПИН безопасно хранить?
Старый 22.02.2023, 16:29   #15  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Поправьте меня если я не прав, но на АОС для доступа к контейнеру с закрытым ключом нужен ПИН
Требовать каждый раз ПИН или еще что - это одна из опций защиты закрытого ключа, которая имеет смысл, скажем, для клиент-банка. В общем же случае никаких ПИНов не требуется, доступ определяется обычными ACL, как и к файлам на диске. По описанным выше принципам настроено использование сертификатов в D365FO и не только: импортируете с закрытым ключом в cert:\LocalMachine\My, раздаете права доступа на закрытый ключ учеткам или их группам - и готово. Посмотрите, как работают те же SSL-сертификаты. Дали доступ к закрытому ключу, указали отпечаток сертификата в настройках (чтобы приложение знало, какой сертификат грузить) - и готово, никто ж не вводит никакие ПИНы при перезапуске веб-серверов, или того же SQL Server, или любой другой службы, которая умеет использовать SSL-сертификаты.
Старый 22.02.2023, 16:54   #16  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Ребят, я за рулем, на всякий случай ещё этот вариант рассмотрите https://ru.wikipedia.org/wiki/MTProto
Старый 13.02.2023, 16:37   #17  
dim-gin is offline
dim-gin
Участник
 
41 / 30 (2) +++
Регистрация: 15.04.2014
Адрес: СПб
Из самого очевидного: с помощью упомянутого System.Security.Cryptography шифровать по ключу, который суть какой-то параметр БД или ОС под БД (название или вообще отдельное свойство в реестре спрятать). Кроме АОСов и админов, по-хорошему, никто не должен обладать правами чтения такой информации.
Старый 13.02.2023, 17:39   #18  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Или вообще замахнуться на WEB службу управления такими паролями.
То есть, установка и чтение только через WEB службу, а она пусть использует тот же System.Security.Cryptography добившись, что работать будет на одном сервере.

Но тут беда - сломался этот уникальный сервер и остались без паролей.

Последний раз редактировалось Raven Melancholic; 13.02.2023 в 17:48.
Старый 13.02.2023, 18:25   #19  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Если в DAX2012 есть таблицы CreditCard*, то там можно найти простой вариант шифрования.
Старый 22.07.2024, 14:46   #20  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Вопрос не мой, транслирую "как сформировали" (без понимания смысла). Поэтому на уточняющие вопросы могу отвечать с задержкой


Есть массив паролей (несколько десятков тысяч) они лежат в таблице Dax2012. Их нужно зашифровать.

Использование стандарта ограничено тем что использование WinAPIServer::cryptProtectData()и WinAPServer::cryptUnprotectData() подразумевает что ключ лежит в реестре на сервере АОС а серверов более 80. То есть необходимо хранить 80 экземпляров зашифрованного пароля для каждого АОС.

Вопрос:
  1. какие могут быть варианты хранения ключей.
  2. какие могут быть вообще варианты организации шифрования
Почему не использовать методы encrypt/decrypt класса \System Documentation\Classes\CryptoAPI ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
kurthatlevik: DAX2012 R3 – Playing with Retail CRT Blog bot DAX Blogs 0 28.10.2015 20:11
kurthatlevik: DAX2012 R3 – Playing with Retail CRT Blog bot DAX Blogs 0 21.05.2015 15:11
Отсутствие контроля активности и приостановки финансовых аналитик при реверсе в DAX2012 titov DAX: Программирование 1 04.05.2015 15:32
DAX2012 - перепоставки по закупкам Starling DAX: Функционал 2 18.03.2014 13:56
Проблемы с кэшированием inventSum в DAX2012 fed DAX: Администрирование 20 19.11.2012 17:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:10.