Базовый тип PASSWORD
Базовый тип PASSWORD - это зашифрованное значение с использованием хранилища ключей KeyStore.
Изменения в ThingWorx 8.2
В ThingWorx 8.2 и более поздних версиях повышена безопасность базового типа PASSWORD. Базовый тип PASSWORD был изменен на зашифрованное на основе KeyStore значение. Это изменение может повлиять на импорт и экспорт паролей. Рекомендуемые действия приведены ниже.
* 
Некоторые агенты Edge несовместимы с новым базовым типом PASSWORD из-за более строгой модели безопасности.
Пакеты SDK C, SDK.NET, EMS и iOS SDK перед этим изменением не имели такого доступа к паролям и не имеют его до сих пор.
До версии ThingWorx 8.2 пакеты Java SDK и Android SDK ранее имели возможность получать пароли и включенные библиотеки, чтобы расшифровывать пароли, когда зашифрованные значения поступали в Edge. С введением этого изменения зашифрованные значения принять или расшифровать невозможно. Если значение с базовым типом PASSWORD отправляется на устройство Edge, оно инициирует ошибку в SDK Java и Android при попытке устройства Edge расшифровать пароль.
Ошибка JSDK до 6.1:
[O: c.t.t.d.u.ValueCollectionSerializer] [T: main] Error reading value collection data: Unable to read primitive value from stream : Decrypt ERROR: null JSDK
Ошибка JSDK 6.1 и выше:
[L: ERROR] [O: c.t.t.d.u.ValueCollectionSerializer] [T: main] Error reading value collection data: Unable to read primitive value from stream : java.lang.IllegalArgumentException: No key store file path specified
* 
Базовый тип PASSWORD не должен использоваться в качестве основного ключа в таблице данных.
Рекомендации по добавлению паролей в таблицы данных и потоки
При добавлении записей в таблицу данных или поток с помощью сервисов AddEntry (например, AddIntegerStreamEntry) через Composer или REST API, пароли должны быть зашифрованы с помощью EncryptionServices.encryptPropertyValue. Например,
// test password value
var test_password = "test_123"
// values:INFOTABLE(Datashape: test_shape)
var values = Things["test_table"].CreateValues();

var params = {
data: test_password /* STRING */
};
values.p1 = Resources["EncryptionServices"].EncryptPropertyValue(params);
values.s1 = "test_string"; //STRING [Primary Key]

var params = {
source : me.name,
values : values
};
.
Рекомендации для импорта и экспорта паролей
При импорте и экспорте паролей используйте систему экспорта по умолчанию и убедитесь, что в системе, выполняющей импорт, установлено то же самое хранилище ключей.
Если требуется экспорт паролей с незашифрованным текстом (рекомендуется только для ротации ключей), экспорт должен выполняться через интерфейс REST API и обрабатываться как конфиденциальная информация.
* 
Внимание! При экспорте паролей с незашифрованным текстом убедитесь, что файл защищается надлежащим способом. В операциях экспорта незашифрованного текста отсутствует встроенная безопасность.
Пример вызова REST API, содержащего пароль с незашифрованным текстом:
GET /Thingworx/Exporter/Users/test HTTP/1.1
Host: localhost:8080
Accept: text/xml
Content-Type: application/json
universal: password
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
* 
Не экспортируйте пароли как первичные ключи в таблицах данных.
* 
При потере ключа шифрования (хранилища ключей) все зашифрованные данные будут потеряны.
Рекомендации по ротации ключей пароля
Рекомендации по использованию ротации ключей см. в документе http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57Pt3r1.pdf (на английском языке).
Рекомендации для паролей в федеративном сценарии
При публикации паролей в федеративном сценарии или подписке на него шифрование и дешифрование выполняются успешно только при использовании одного и того же ключа шифрования пароля. Если ключи будут отличаться, дешифрование будет неудачным на федеративном сервере и свойство не будет прочитано. При попытке использовать тот же ключ шифрования в журнал будет записана ошибка.
Было ли это полезно?