Thingworx는 시스템 설정을 구성할 수 있는 기능을 제공하는 시스템 통합 도구 Subsystem을 제공합니다.
User Management Subsystem은 Thingworx의 비밀번호 암호화 알고리즘과 알고리즘에서 사용되는 몇가지 변수를 설정할 수 있습니다.
User Management Subsystem 접근 #
Thingworx Composer에서 검색창에 “UserManagementSubsystem"을 검색합니다.
해당 SubSystem의 Configuration탭으로 접근합니다.
Password Hash Settings 섹션에서 비밀번호 옵션을 설정할 수 있습니다.
비밀번호 Hashing 알고리즘 및 변수 설정 #
관리자가 선택 가능한 Hashing 알고리즘은 PBKDF2WithHmacSHA512(Default), PBKDF2WithHmacSHA1 두가지 이며
PBKDF2WithHmacSHA512 Hashing 알고리즘에서 사용되는 변수는 Salt size in bytes, Hash size in bytes, Hashing iterations 총 3가지가 있습니다.
비밀번호 해시 설정 | 기본 유형 | Default | 설명 |
---|---|---|---|
Hashing algorithm | STRING | PBKDF2WithHmacSHA512 | RFC 2898( https://tools.ietf.org/html/rfc2898 ) 에 정의된 암호화 해싱 알고리즘 중 하나 |
Salt size in bytes | INTEGER | 64 | 복잡성을 증가시키기 위해 사용자 비밀번호에 추가된 난수 바이트 수 |
Hash size in bytes | INTEGER | 64 | 암호화 결과 해시의 바이트 크기이며, 선택한 해싱 알고리즘에 따라 달라짐 (예: SHA-256은 256비트/32바이트 해시 생성) |
Hashing iterations | INTEGER | 100000 | 해싱 알고리즘 반복 적용 횟수 |
Thingworx의 비밀번호 일치 여부 판단 로직 #
Thingworx 시스템 DB인 “thingworx"의 “user_model” 테이블에 사용자 비밀번호 정보가 저장되며 해당 테이블에 사용자를 추가 또는 업데이트하는 시점의 Thingworx 암호화 옵션들도 함께 등록됩니다.
Thingworx에서는 위의 저장된 옵션 정보를 토대로 비밀번호의 일치 여부를 내부 로직에서 다음과 같이 판단합니다.
- 로그인을 시도하는 유저가 입력한 암호 문자열을, 해당 유저의 정보와 함께 thingworx DB에 저장되어있는 옵션을 사용해 암호화 하는데, 사용자가 입력한 비밀번호 문자열의 암호화 결과가 Thingworx 시스템 DB인 “thingworx"의 “user_model” 테이블에 기록된 암호화 결과와 동일하면 비밀번호가 일치하는 걸로 판단합니다.
- 암호화 결과에 기록되어있는 Salt 난수를 Hex로 변환합니다.
- 입력한 비밀번호 문자열을 Hex로 변환된 Salt 난수를 사용하여, 지정한 Hashing iterations 만큼 반복하여 지정된 키 길이(Hash size in bytes)로 PBKDF2 SHA-512/PBKDF2 SHA-1 변환합니다.
- 변환 결과가 해당 유저의 암호화 결과에 기록되어있는 PBKDF2 Encode Result와 동일한지 비교합니다.
유저 비밀번호 암호화 정보 저장 정보 #
Thingworx의 시스템 DB인 “thingworx"의 “user_model” 테이블은 유저의 비밀번호 암호화 정보와 더불어 유저 객체의 기본적인 정보가 저장된다. 그 중 유저 로그인에 사용되는 암호화와 관련된 주요 옵션은 아래와 같습니다.
- enabled : 유저 계정의 사용 여부
- name : 유저 계정명 정보
- passwordHash : 유저 비밀번호 암호화 결과
- passwordHashAlgorithm : User Management Subsystem에서 설정된 Hashing algorithm 옵션
- passwordHashIterationCount : User Management Subsystem에서 설정된 Hashing iterations 옵션
- passwordHashSaltSizeInBytes : User Management Subsystem에서 설정된 Salt size in bytes 옵션
- passwordHashSizeInBytes : User Management Subsystem에서 설정된 Hash size in bytes 옵션
- locked : 유저 계정 Lock 정보