Как да съхранявате безопасно крипто парола

Работя върху Java RCP приложение. Потребителят трябва да се удостовери със своята SmartCard, за да получи достъп до приложението. Вътре в него той може да отваря/записва файлове, които трябва да се съхраняват криптирани.

В момента използвам базирано на парола AES криптиране с твърдо кодирана парола. Това очевидно не е сигурно, така че имам нужда от различен подход за криптиране/декриптиране на файлове.

Това, което поражда този проблем е, че има няколко изисквания, които трябва да бъдат изпълнени:

  • няма гарантирана мрежова връзка (трябва да може да се използва в офлайн режим)
  • множество потребители трябва да имат достъп до файловете (така че няма криптиране с публичен/личен ключ)
  • не трябва да има един "главен" ключ, използван за всички файлове

Редактиране: Не е необходимо да имам много високо ниво на сигурност. Трябва да е малко по-трудно за атакуващия да получи ключа, отколкото просто да отвори разпространения JAR файл и да получи ключа в обикновен текст.

Всякакви съвети ще бъдат оценени.


person st3ve    schedule 17.03.2011    source източник
comment
Не съхранявайте паролата, съхранявайте хеш на паролата.   -  person Grant Thomas    schedule 18.03.2011
comment
Имам нужда от паролата, за да възстановя ключа и да дешифрирам файловете. Така че хеш няма да работи.   -  person st3ve    schedule 18.03.2011
comment
Използвайте хеша като ключ. Така или иначе, ако те намерят вашия ключ, вие потенциално сте прецакан, независимо от формата, в който се съхранява; не съхранявайте ключа, а го реконструирайте всеки път, като хеширате дадената парола - валидна парола = правилен ключ.   -  person Grant Thomas    schedule 18.03.2011
comment
Използването на хеша като ключ и след това съхраняването на хеша е същото като използването на паролата като ключ и съхраняването на паролата.   -  person Zoe    schedule 18.03.2011


Отговори (2)


За всеки файл създайте нов ключ. Шифровайте файла с този ключ (използвайки AES).

След това за всеки потребител, на когото е разрешено да чете файла, шифровайте новия ключ с техния публичен ключ (този, който съответства на частен ключ на неговата смарт карта). Съхранявайте тези криптирани ключове с файла.

Когато потребител иска да прочете файл, софтуерът използва неговата смарт карта, за да възстанови ключа за криптиране на съдържанието, използван за файла.

Файловият формат може да използва синтаксиса на криптографското съобщение на PKCS #7 или OpenPGP.

person erickson    schedule 17.03.2011
comment
Това помогна много. Благодаря ти много! - person st3ve; 18.03.2011

Предупреждение: Не съм добре запознат със сигурността и това е просто нещо, което ми мина през ума.

Като предложение направете паролата за всеки файл да бъде хеш, съдържащ известна сол, която се генерира на случаен принцип за всеки файл, и единична парола, която е криптирана индивидуално за всеки потребител. Можете безопасно да съхранявате произволните соли локално, защото те не са ключът към файла и никой потребител не знае паролата за отключване на файла. Чрез шифроване и подписване на паролата с шифроване с публичен ключ можете да удостоверявате потребители и да контролирате достъпа за всеки потребител, за всеки файл.

По този начин бихте могли да използвате криптиране с публичен ключ от всеки потребител, за да доставите паролата, която не се съхранява никъде в системата, да защитите файловете независимо един от друг и да не сте зависими от външни източници.

person Zoe    schedule 17.03.2011
comment
Ако ви разбрах правилно, тогава това би било добър подход, ако един файл трябва да може да се дешифрира само от единствен потребител. В моето приложение един файл трябва да може да се чете от много потребители. Лошо, това прави вашето предложение невъзможно за използване. - person st3ve; 18.03.2011