Як сховати паролі у програмі
Роблю програму у якій працюватиме користувач (оператор). Його роботу буде контролювати другий користувач (адмін) Цей адмін може закрити своїм паролем деякі функції програми, щоб оператор ними не міг скористатися. Де і як зберегти пароль адміністратора? Як підстрахуватися від того, що оператор просто не стере пароль адміна, наприклад ключ у реєстрі в якій він збережений, щоб програма думала, що пароль адміна не був встановлений. Як зробити складніше? Може, є якісь рішення?
> Progger (03.12.05 22:48)пароль зберігати не треба, зберігай хеш пароля.
> Роблю програму в якій працюватиме користувач (оператор)у свою чергу коли за машиною працює оператор, у нього повинні бути обмеження на доступ до потрібного ключа реєстру.
> пароль зберігати не треба, зберігай хеш пароля.
Що хеш, що пароль, сенс той самий. Хеш теж треба десь зберігати, отже, його можна видалити?
> працює оператор, він повинен мати обмеження на доступ > до потрібного ключа реєстру.
А чи можна докладніше? Оператор повинен мати права адміністратора на цій машині. За цієї умови реально обмежити доступ до ключа?
Думаю зробити щось на кшталт цього. Програма при першому запуску записує в реєстр зашифрований зашитим у неї ключем рядок. Коли встановлюється пароль адміну, цей рядок перешифровується за допомогою пароля. А потім перевіряти яким паролем вона зашифрована. Якщо дефолтним, то пароля адміну немає. Але поки що це все продати ще не придумав. Може ще якісь варіанти можна спробувати?
> Progger (03.12.05 23:24) [3]> Оператор повинен мати права адміністратора на цій машині. > За цієї умови реально обмежитидоступ до ключа?практично не реально. У даному випадку по-справжньому захиститися дуже складно.
Якщо оператор має можливість аналізувати код програми і робити в нього вставки, тоді захиститися можна за допомогою ключової дискети, яку адмін виймає з кишені, коли хоче попрацювати з програмою в адміністративному режимі. На цій дискеті може бути, наприклад, маленька dll з необхідним шматком програми.
Якщо користувач тільки читає програму, але не ризикне змінювати в ній ні байта, то критичні шматки програми, заборонені для виконання користувачем, можна легко вставити в програму і захистити їх паролем, хеш якого буде також перебувати в програмі. Якщо пароль потрібно час від часу змінювати, то хеш можна зберігати в невеликому файлі, розташованому в тій директорії, що і програма. Використання реєстру, на мою думку, жодних додаткових переваг не дає.
З дискетою – гарна думка. Напевно, навіть краще дозволити адміну вибрати через діалог місце куди зберегти пароль. Флешка, дискета, а зберігати шлях до паролю. Треба обміркувати.
А навіщо все так ускладнювати? Може просто зберігати паролі у файлі, в шифрованому вигляді природно, а якщо файл стертий, то відновлювати паролі за замовчуванням, задані в самій програмі? Просто щоразу перевіряти спочатку наявність файлу, а потім уже правильність пароля.
Паролі, які за замовчуванням будуть відомі оператору. Отже щоб налаштувати закриті паролем адміна оператору достатньо стерти файл з паролями і використовувати дефолтні. А цього треба уникнути.
А таке питання, чи результати роботи будуть зберігатися у файлах закритого (тобто як би не в текстовому вигляді) формату чи відкритого? Потім файли з результатами переходити з комп'ютера на комп'ютер будутьчи використовуватимуться стаціонарно?
Навіяно ASProtec (new stain)
Коротше така ідея (зашифровані) пороли зберігати у файлах-результатах + просто домальовувати пороль наприкінці вашої ехе ну і для вірності можна ще в реєстр закинути. При зникненні одного з цих поролей можна створити балку і заблокувати прогу до розбирань.
А чому б не впхнути пароль прямо в exe-шник твоєї проги? Або ДЛЛ? До того ж у зашифрованому-захешованому вигляді. Плюс згори мона повісити UPX, ASProtect і т.п. Я сумніваюся, що користувач (оператор) зможе їх зняти. При цьому якщо шифруватимеш паролі за алгоритмом PGP.
Saimon (05.12.05 11:16) [10]Ну і я про те ж, тільки я говорю про поролі, що дописуються вже до готового еха в динамічному порядку
> А чому б не впхнути пароль прямо в exe-шник твоїй > проги??
Потрібно щоб і оператор і адмін могли паролі міняти. Думаю зробити приблизно так. Адмін встановлює пароль і через діалог зберігає його де хоче, наприклад, на дискеті. У реєстр пишу хеш цього пароля та шлях до нього. При перевірці цим шляхом порівнюю хеші. Виходить, що дізнатися пароль адміна оператор не зможе, є тільки хеш, залишилося придумати як програма дізнається що пароль адміна встановлений. Напевно таки до купи шифрувати цим паролем якийсь рядок і при перевірці намагатися розшифрувати дефолтним паролем, якщо невдача, то шукати пароль збереженим шляхом? Якось заплутано.
Не знаю. Просто сам не впораюся з тим, що ти написав. :(> Адмін встановлює пароль і через діалог зберігає його > де хоче, наприклад на дискеті. У реєстр пишу хеш цього > пароля та шлях до нього.
Хех. Ти втрачаєш на увазі, що шлях з реєстру і хеш знову ж таки мона просто вбити.
А то про що говорю я, робиться так. Просто пиши в свій-таки exe під час виконання проги (у дельфі є функції, правда не пам'ятаю які) як ресурс у RCData з незрозумілим ім'ям і користувач, як правило, подумає, що це двійкові дані або ще щось. головне шифруй.