Хранение учетных данных Amazon в приложении C # для настольных ПК - PullRequest
14 голосов
/ 21 июля 2009

Я смотрю на использование Amazon S3 и simpleDB в настольном приложении.

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

Я предполагаю, что о сохранении их в приложении не может быть и речи, поскольку их легко можно было бы выделить.

Другим вариантом является создание веб-службы, которая создает подпись аутентификации aws, но у нее есть свои проблемы. Требуется ли для подписи все данные из загружаемого файла? Если это так, я должен был бы передать все данные дважды. Тогда будет центральная точка отказа, которая была одной из основных причин использования aws.

Есть идеи?

UPDATE:

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

ОБНОВЛЕНИЕ 2 - Сентябрь 2011

Amazon опубликовала некоторые подробности использования службы токенов AWS, которая позволяет проводить аутентификацию без раскрытия вашего секретного ключа. Более подробная информация доступна в этом блоге .

Ответы [ 4 ]

10 голосов
/ 22 июля 2009

Тим, вы действительно используете два ключевых подхода:

  1. ХОРОШО ХОРОШО: храните секретный ключ «в тайне» в приложении. Действительно, существует серьезный риск того, что кто-то просто выберет его из кода приложения. Некоторые меры могут заключаться в том, чтобы (а) использовать DPAPI для хранения ключа вне двоичного файла приложения или (б) получать ключ по проводной связи от веб-службы каждый раз, когда он вам нужен (через SSL), но никогда не сохранять его локально. Никакие меры не могут замедлить работу компетентного злоумышленника с помощью отладчика, поскольку ключ открытого текста должен находиться в оперативной памяти приложения.

  2. ЛУЧШЕ: нажмите на контент, который нужно защитить, на ваш веб-сервис и подпишите его там. Хорошая новость заключается в том, что необходимо подписать только имя запроса и отметку времени, а не все загруженные биты (я полагаю, Amazon не хочет тратить циклы на проверку всех этих битов!). Ниже приведены соответствующие строки кода из собственного Amazon * Введение в AWS для разработчиков на C #". Заметьте, как Aws_GetSignature вызывается только с "PutObject" и отметкой времени? Вы можете определенно реализовать подпись на своем веб-сервисе, не отправляя весь файл и не ставя под угрозу свой ключ. Если вам интересно, Aws_GetSignature - это 9-строчная функция, которая выполняет хэш SHA1 для конкатенации константной строки «AmazonS3», имени операции и представления временной метки в RFC822, используя ваш секретный ключ.

    DateTime timestamp = Aws_GetDatestamp();
    string signature = Aws_GetSignature( "PutObject", timestamp );
    byte[] data = UnicodeEncoding.ASCII.GetBytes( content );
    service.PutObjectInline( "MainBucket", cAWSSecretKey, metadata,
            data, content.Length, null,
            StorageClass.STANDARD, true,
            cAWSAccessKeyId, timestamp, true,
            signature, null );
    

РЕДАКТИРОВАТЬ: обратите внимание, что, хотя вы можете скрыть часть секретного ключа своей идентичности Amazon, часть идентификатора ключа доступа должна быть встроена в запрос. Если вы не отправите файл через собственный веб-сервис, вам придется встраивать его в приложение.

0 голосов
/ 30 июля 2009

Предоставите ли вы кому-либо, кто получил копию вашей программы, доступ к данным на S3 / SimpleDB?В противном случае вам потребуется собственная схема аутентификации, независимая от безопасности AWS.

В этом случае вы можете реализовать веб-сервис, который принимает учетные данные, которые вы предоставляете своим клиентам (например, имя пользователя / пароль,цифровой сертификат и т. д.), а затем выполняет операции S3 / SimpleDB, которые требуются вашей программе.Таким образом, учетные данные AWS никогда не покидают AWS.Если учетные данные конкретного пользователя скомпрометированы, вы можете отменить эти учетные данные в своем веб-сервисе.

0 голосов
/ 21 июля 2009

Вы можете зашифровать файл конфигурации и / или использовать ProtectedData. Вот мой блог на обоих .

ОБНОВЛЕНИЕ: Вы можете шифровать файл app.config как часть этапа установки. Пример здесь: http://www.codeproject.com/KB/security/encryptstrings.aspx. Не отлично, но лучшее, что я нашел до сих пор.

0 голосов
/ 21 июля 2009

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

Имеет ли Windows общесистемный сервис, подобный Keychain Manager от Apple ? Если так, поместите свои учетные данные там. Если нет, возможно, вы можете создать его расширенную версию для хранения зашифрованной версии ваших учетных данных AWS.

Требуется ли для подписи все данные из загружаемого файла?

Подпись HMAC SHA-1 является кодированным шифрованием заголовков HTTP-запроса. Эта подпись является хеш-значением и будет очень короткой по сравнению с вашими данными, длиной всего 20 байтов.

...