Можно ли использовать AES алгоритмы в CryptEncryptMessage?

Тема в разделе "WASM.CRYPTO", создана пользователем ubil, 7 ноя 2006.

  1. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Данная функция требует параметр
    CRYPT_ALGORITHM_IDENTIFIER, в который нужно прописать pszOID алгоритма... У меня есть имя алгоритма, "AES 128" и я пытаюсь получить pszOID по имени с помощью функции CryptFindOIDInfo(CRYPT_OID_INFO_NAME_KEY,(void*)algoNameW,0)...
    Но эта функция не хочет работать при данном параметре(хотя при имени алгоритма "3DES" все ОК). А еще я что-то даже не смог найти szOID алгоритма AES в wincrypt.h ... Кто-нибудь может сказать, вообще, возможно ли с помощью CryptEncryptMessage зашифровать данные алгоритмом AES_XXX?
     
  2. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    да, если алгоритм проддерживается криптопровайдером.
    Вот например:

    Код (Text):
    1. Provider type      Provider Name
    2. _____________    _____________________________________
    3.         1        Dekart RSA Cryptographic Provider v1.0
    4.  
    5.                Enumerating the supported algorithms
    6.  
    7.      Algid      Bits      Type        Name         Algorithm
    8.                                      Length          Name
    9.     ________________________________________________________
    10.     00008001h    128     Hash          4           MD2
    11.     00008002h    128     Hash          4           MD4
    12.     00008003h    128     Hash          4           MD5
    13.     00008004h    160     Hash          4           SHA
    14.     00008008h    288     Hash          12          SSL3 SHAMD5
    15.     00008005h    0       Hash          4           MAC
    16.     00008009h    0       Hash          5           HMAC
    17.     00002400h    1024    Signature     9           RSA_SIGN
    18.     0000a400h    1024    Exchange      9           RSA_KEYX
    19.     00006602h    128     Encrypt       4           RC2
    20.     00006801h    128     Encrypt       4           RC4
    21.     00006601h    56      Encrypt       4           DES
    22.     00006609h    112     Encrypt       13          3DES TWO KEY
    23.     00006603h    168     Encrypt       5           3DES
    24.     0000660eh    128     Encrypt       8           AES 128
    25.     0000660fh    192     Encrypt       8           AES 192
    26.     00006610h    256     Encrypt       8           AES 256
     
  3. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Infern0
    Я пользуюсь вот таким:
    Код (Text):
    1. Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)
    Он прекрасно аллокируется, и более того, я могу перечислив все алгоритмы которые он поддерживает, убедиться что L"AES 128" есть в этом списке.
    Проблема, как я написал, что я не могу получить pszOID этого алгоритма по имени(да и по algId тоже), чтобы полностью заполнить нужные параметры CryptEncryptMessage...
    Я погуглил немного - народ сталкивался с такой проблемой, но ответ я пока не нашел...
     
  4. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    оно ?
    Код (Text):
    1. OID = 06 08 60 86 48 01 65 03 04 01
    2. Comment = NIST Algorithm
    3. Description = aes (2 16 840 1 101 3 4 1)
    4.  
    5. OID = 06 09 60 86 48 01 65 03 04 01 01
    6. Comment = NIST Algorithm
    7. Description = aes128-ECB (2 16 840 1 101 3 4 1 1)
    8.  
    9. OID = 06 09 60 86 48 01 65 03 04 01 02
    10. Comment = NIST Algorithm
    11. Description = aes128-CBC (2 16 840 1 101 3 4 1 2)
    12.  
    13. OID = 06 09 60 86 48 01 65 03 04 01 03
    14. Comment = NIST Algorithm
    15. Description = aes128-OFB (2 16 840 1 101 3 4 1 3)
    16.  
    17. OID = 06 09 60 86 48 01 65 03 04 01 04
    18. Comment = NIST Algorithm
    19. Description = aes128-CFB (2 16 840 1 101 3 4 1 4)
    20.  
    21. OID = 06 09 60 86 48 01 65 03 04 01 15
    22. Comment = NIST Algorithm
    23. Description = aes192-ECB (2 16 840 1 101 3 4 1 21)
    24.  
    25. OID = 06 09 60 86 48 01 65 03 04 01 16
    26. Comment = NIST Algorithm
    27. Description = aes192-CBC (2 16 840 1 101 3 4 1 22)
    28.  
    29. OID = 06 09 60 86 48 01 65 03 04 01 17
    30. Comment = NIST Algorithm
    31. Description = aes192-OFB (2 16 840 1 101 3 4 1 23)
    32.  
    33. OID = 06 09 60 86 48 01 65 03 04 01 18
    34. Comment = NIST Algorithm
    35. Description = aes192-CFB (2 16 840 1 101 3 4 1 24)
    36.  
    37. OID = 06 09 60 86 48 01 65 03 04 01 29
    38. Comment = NIST Algorithm
    39. Description = aes256-ECB (2 16 840 1 101 3 4 1 41)
    40.  
    41. OID = 06 09 60 86 48 01 65 03 04 01 2A
    42. Comment = NIST Algorithm
    43. Description = aes256-CBC (2 16 840 1 101 3 4 1 42)
    44.  
    45. OID = 06 09 60 86 48 01 65 03 04 01 2B
    46. Comment = NIST Algorithm
    47. Description = aes256-OFB (2 16 840 1 101 3 4 1 43)
    48.  
    49. OID = 06 09 60 86 48 01 65 03 04 01 2C
    50. Comment = NIST Algorithm
    51. Description = aes256-CFB (2 16 840 1 101 3 4 1 44)
     
  5. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Я вообще-то еще раньше эти OIDы все нашел,
    здесь www_dot_alvestrand.no/objectid/2.16.840.1.101.3.4.1.html
    Код (Text):
    1. 2.16.840.1.101.3.4.1.1 - id-aes128-ECB
    2. 2.16.840.1.101.3.4.1.2 - id-aes128-CBC
    3. 2.16.840.1.101.3.4.1.3 - id-aes128-OFB
    4. 2.16.840.1.101.3.4.1.4 - id-aes128-CFB
    5. 2.16.840.1.101.3.4.1.21 - id-aes192-ECB
    6. 2.16.840.1.101.3.4.1.22 - id-aes192-CBC
    7. 2.16.840.1.101.3.4.1.23 - id-aes192-OFB
    8. 2.16.840.1.101.3.4.1.24 - id-aes192-CFB
    9. 2.16.840.1.101.3.4.1.41 - id-aes256-ECB
    10. 2.16.840.1.101.3.4.1.42 - id-aes256-CBC
    11. 2.16.840.1.101.3.4.1.43 - id-aes256-OFB
    12. 2.16.840.1.101.3.4.1.44 - id-aes256-CFB
    Но они у меня на компе не зарегистрированы(проверял с помощью CryptEnumOIDInfo), и функция CryptEncryptMessage их не воспринимает...
    Но крипропровайдер говорит что типа да, есть такой алгоритм "AES 128". Че за нах ваще такой???:)
     
  6. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    какой код ошибки возвращается ?
    могу предположить что из-за
    провайдер не регистрирует свои AES алгоритмы по этим ID-ам. Если сильно хочется - можно посмотреть внутрь дллки этого провайдера на предмет строк с OID - вдруг повезет :)
     
  7. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Без "(prototype)" провайдер не выделяется, он в реестре прописан так, это у меня другая песня еще была...:)
    А sOID -ы c провайдерами, как я понимаю, никак не связаны, их можно все перебрать с помощью простой программки:
    Код (Text):
    1. #include <windows.h>
    2. #include <wincrypt.h>
    3. #include <stdio.h>
    4.  
    5. BOOL WINAPI EnumOIDInfo(PCRYPT_OID_INFO pInfo,void* pvArg)
    6. {
    7.     MessageBoxW(NULL,pInfo->pwszName,L"Curr Name",NULL);
    8.     /*printf("Current Item Name is: %s\n",pInfo->pwszName);*/
    9.     return TRUE;
    10. }
    11.  
    12. int main()
    13. {
    14.     char c;
    15.     CryptEnumOIDInfo(
    16.                     0/*CRYPT_ENCRYPT_ALG_OID_GROUP_ID*/,
    17.                     0,
    18.                     0,
    19.                     (PFN_CRYPT_ENUM_OID_INFO)EnumOIDInfo
    20.                 );
    21.     scanf("%c",&c);
    22.     return 0;
    23. }
     
  8. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    ошибка UNKNOWN_ALGO

    Надо попробовать:) Хотя мне что-то сильно кажется что эти оиды где-то в реестре прописываются и отнюдь не криптопровайдерами... Хотя поиск по реестру ничего не дал, не смог я например найти в реестре оид с именем "Идентификатор ключа центра сертификатов", он перечисляется с помощью той программки, которую я привел...
     
  9. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    ну дык программка возвращает OIDы, которые провайдеры зарегистрировали как поддерживаемые.
     
  10. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    В том-то и дело, что эта программка выводит не оиды, а имена алгоритмов - это же разные вещи... А без оида я не могу пользоваться CryptEncryptMessage:dntknw: Что-то в этой дллке я не нашел строковых констант типа "2.16.840.1.101.3.4.1.1", зато нашел путь в реестре к названию криптопровайдера. Шаманство какое-то с этими AES у Майкрософт...
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    зы:
    А мне вот интересно с точки зрения закона AES не является гос.стандартом слодовательно юзать низя! А на наши, нужна лицензия, если написать прогу использующую сабж не будет ли это граничить с нашим законодательством?
     
  12. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Но он же поставляется с Майкрософтовским провайдером, если и должны быть какие-то претензии, то только к MS, я так думаю...
     
  13. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    договаривай - нельзя для шифрования сведений, составляющих гостайну. Для остального - можно.
     
  14. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    EvilsInterrupt,infern0

    Шифровать...Расшифровать... Разбежались:) Давайте лучше сначала разберемся как вообще можно нормально удобно пользоваться этим алгоритмом с помощью CryptEncryptMessage? А, кстати, какая еще может быть альтернатива? Только ли с помошью CryptEncrypt? Но ведь тогда работа с сертификатами совсем кривая получается... Да и эти 11 байт, вообще отстой короче:dntknw:

    Интересно, как дела обстаят на Win 2003 server?... Если там провайдер без добавочного " (prototype)" выделяется, это может обнадежить...
     
  15. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    утки (c)
    взять провайдер с нормально реализованным AES :)
     
  16. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Фсе... Разобрался вроде...
    В Майкрософтовском саппорте ответили, что функция CryptEncryptMessage будет поддерживать AES алгоритмы только начиная с win. Vista...
     
  17. Guest

    Guest Guest

    Публикаций:
    0
    - по закону в РОССИИ(!) незя юзать сильно криптостойкие алгоритмы и майкрософт использует слабые (в РОССИИ), чтобы небыло проблем (в лицензионных виндах, в пиратках(English+MUI) можно найти помощнее). Так что лучше самому писать тогда ты будешь уверен в их стойкости, а законно или нет - добавь какие-нибудь несущественные изменения в код и можеш сказать что совпадения есть но неполные и все это случайность - юридически верно, да вообще вряд ли на тебя подадут в суд за бугром.
    P.S. По закону копирайты распространяются на алгоритмы, а не на код, то есть менять нужно алгоритм (так чтобы работал нормально, а совпадение результатов - случайность) (поменяй препросчитанные таблицы):
    table[] = {1, 2, 3, 4, 5, 6, 7 ... 100} меняем на table[] = {0, 1, 2, 3, 4, 5, 6 ... 99} и код table на table+1
     
  18. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    Ссылку на соответствуюущую статью закона в студию.
     
  19. Guest

    Guest Guest

    Публикаций:
    0
    3. Настоящее Положение не распространяется на деятельность по распространению:
    .....
    ж) шифровальных (криптографических) средств независимо от их назначения, реализующих симметричные криптографические алгоритмы и обладающих максимальной длиной криптографического ключа менее 40 бит, а также реализующих асимметричные криптографические алгоритмы, основанные либо на разложении на множители целых чисел, либо на вычислении дискретных логарифмов в мультипликативной группе конечного поля, либо на дискретном логарифме в группе, отличной от названной, и обладающих максимальной длиной криптографического ключа 128 бит.

    - нет лицензии - нет разрешения на продажу.
    P.S. Ставим и юзаем "Консультант Плюс - Высшая школа" (для студентов пока бесплатно).
     
  20. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    Я ничего не понял из того, что ты написал. Сплошной сумбур.

    Можешь указать полное название документа и номер статьи?

    Ворда у меня щас нет.