Показаны сообщения с ярлыком crypto. Показать все сообщения
Показаны сообщения с ярлыком crypto. Показать все сообщения

понедельник, 15 марта 2021 г.

ecdsa in driver

Lets assume that we have buggy and dangerous driver (which "rely on many unexported functions and select them via pattern scans which are regularly revalidated against windows insider builds", he-he). Sure we want restrict access to it, for example like ProcessHacker do

Unfortunately the latter uses CNG and cannot work on xp/w2k3. So I made fork of libecc to use this library with WDK7. Test driver and client also included

How to build user-mode part

I commited VS2017 project files for library, ec_utils and test client - they located in directory vs.
Next you must sign your client:

Generate your keys (constants BRAINPOOLP512R1, ECRDSA and SHA3_512 hardcoded in driver - sure you can use what you want):
ec_utils.exe gen_keys BRAINPOOLP512R1 ECRDSA mykeypair

and sign your client 
ec_utils.exe sign BRAINPOOLP512R1 ECRDSA SHA3_512 testclnt.exe mykeypair_private_key.bin testclnt.sig

now copy file mykeypair_public_key.h to directory drv
Also you need convert file testclnt.sig to 1.inc to driver source code - I am too lazy to read signatures from registry so they hardcoded in driver body

How to build driver

Launch right "Build Environment" from WDK7, Makefile for library located in directory src and Makefile for driver in directory drv. I hope you know what to do with them

Run

You will need admin privileges, at first install driver
testclnt.exe full_path2_ecdsadrv.sys
and just run
testclnt.exe

If you were careful enough with the signatures you can see something like:
IOCTL_TEST_IOCTL return 1

This means that driver checked EC DSA of your testclnt.exe and now agree to work with it. Sure you can have several trusted clients - just change ALLOWED_CLIENTS in vrfy.c and init each client with right signature

And finally when you have enough playing you can uninstall driver:

testclnt.exe -u

среда, 31 августа 2016 г.

bugs in mbedtls DH client/server

1) altough always used constant MBEDTLS_MD_SHA256 parameters are signed with sha1 and then we have MBEDTLS_ERR_RSA_VERIFY_FAILED in library\rsa.c on line 1435
2) in dh_server.c when receiving client's public value length of buffer must be dhm.len

Nice cryptolibrary, totally ready to work in kernel mode I think
patch:

вторник, 30 августа 2016 г.

how to build mbedtls-2.3.0 with wdk7

Lets say that you want to have some Diffie-Hellman-Merkle algorithm & hmac inside your driver. I found plain C library mbedtls which is very suitable for this, but has one minor problem - it does not support wdk7. So I just made port for it

понедельник, 18 апреля 2016 г.

xxxSetAuditingInterface

Nice piece of code from lsasrv:
_GetCngAuditFunctions@4 proc near   ; CODE XREF: SrvPrepKeyIso(x)+33p
                                    ; LsapInitCNGAuditing()+Dp
  test  ecx, ecx
  jz    short loc_5095F661
  mov   dword ptr [ecx], offset _AuditFunctionTable
  xor   eax, eax
  retn

_AuditFunctionTable:
_AuditFunctionTable db    1
  db    0
  db    0
  db    0
  dd offset _CngAdtSelfTest@12              ; offset 4
  dd offset _CngAdtKeyFileOperation@32      ; offset 8
  dd offset _CngAdtKeyMigrationOperation@28 ; offset C
  dd offset _CngAdtVerificationFailure@24   ; offset 10
  dd offset _CngAdtCryptOperation@28        ; offset 14
  dd offset _CngAdtPrimitiveFailure@16      ; offset 18


This table used in SrvPrepKeyIso & LsapInitCNGAuditing functions:

четверг, 20 июня 2013 г.

openssl-1.0.1e

How to build subj for windows 64bit ? Offical solutions do not work

perl Configure VC-WIN64A
nmake
makefile(609) : fatal error U1002: syntax error : invalid macro invocation '$'
Stop.


O`k, second way:  
ms\do_win64a.bat
nmake -f ms/nt.mak
...
perl crypto\sha\asm\sha256-586.pl tmp32\sha256-586.asm
Pick one target type from
        elf     - Linux, FreeBSD, Solaris x86, etc.
        a.out   - DJGPP, elder OpenBSD, etc.
        coff    - GAS/COFF such as Win32 targets
        win32n  - Windows 95/Windows NT NASM format
        nw-nasm - NetWare NASM format
        macosx  - Mac OS X
NMAKE : fatal error U1077: 'C:\Perl\bin\perl.EXE' : return code '0x1'
Stop.



Wtf, why sha256-586 ? Lets check:  
dir /b crypto\sha\asm\*64.pl
sha1-ia64.pl
sha1-x86_64.pl
sha512-ia64.pl
sha512-x86_64.pl



So source tree does not even contain sha256-x86_64.pl !

пятница, 7 июня 2013 г.

building botan with openssl

I`ll describe how to build this cool crypto library with openssl with msvc
It seems that configure.py does not allow you to set additional include & library directories for external packets like openssl/zlib etc
So I used dirty hack
First you just must run configure.py:
python configure.py --cc=msvc --cpu=p4 --enable-asm --with-openssl

Now you can just patch generated Makefile:  
CXX           = cl /MD /IC:\work\src\crypto\openssl-0.9.8y\include
LINK_TO       = advapi32.lib C:\work\src\crypto\openssl-0.9.8y\out32\libeay32.lib user32.lib gdi32.lib

You also need to add gdi32.lib bcs it is used in openssl for functions like DeleteDC. So now you are able build both botan.dll and check.exe:
nmake 
nmake check 
check --test

воскресенье, 11 сентября 2011 г.

поставил Intel C++ Сompozer XE 2011

с целью проведения всяческих бесчеловечных опытов. icl.exe пишет например
Intel(R) C++ Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0.0.104 Build 20101006
Затем пересобрал на нем свою тестилку скорости хешей (на основе fehashmac) для 64бит:
  • на vs2008 со стандартными ключами оптимизации
  • на icl.exe со стандартными ключами оптимизации
  • на icl.exe с оптимизациями, выкрученными на максимум - например были указаны генерация кода sse4.1, global optimization & interprocedural optimization
Результаты дико угарные. Размеры .exe:
  • vs2008 - 317952 байт
  • intel - 471040 байт. Просмотр кода показывает что были тупо развернуты все циклы с константыми счетчиками циклов
  • intel opt - 472576 байт
Прирост производительности (запускалось все на corei7, цифры даны в мегабайтах в секунду)

четверг, 1 сентября 2011 г.

bug in fehashmac

нашел давеча
Например поскольку длина у него хранится в битах то вместо

 memcpy (hashval, state->out, state->hashbitlen
<<3);

должно быть

  memcpy (hashval, state->out, state->hashbitlen>>3);


Никогда не доверяй open-source, бгг

Update: автор библиотеки не страдает кровавым энтерпрайзом головного мозга - после непродолжительной переписки он не стал грузить меня необходимостью "поиска узких мест", "докупанием железа на сервере ", "недовольством Заказчика" и просто выпустил новую версию, бгг

среда, 31 августа 2011 г.

задача компилятора

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

Думаю что это очень опасное заблуждение - компилятор в большинстве случаев не может оптимизировать даже куда более простые конструкции. Возьмем для примера библиотеку хешей FEHASHMAC и посмотрим какой код генерируется для хеша blake. Мой выбор пал на fehashmac например потому что она написана на plain C, генерация кода для которого намного проще чем для C++

Как это в open-source принято под windows на visual studio она не собирается. Если вас испугали чуть более 600 ошибок при компиляции - никогда вам не удастся приспособить open-source для чего-нть полезного, бгг. Ошибки впрочем все практически одинаковы и легко фиксятся за пол-часа примерно

Рассмотрим например такую операцию как конвертацию dword из big-endian в little-endian. Традиционно такой код пишут примерно так (файл include/blake_opt32.h):

#define U8TO32_BE(p) \
  (((u32)((p)[0]) << 24) | \
   ((u32)((p)[1]) << 16) | \
   ((u32)((p)[2]) <<  8) | \
   ((u32)((p)[3])      ))

А теперь посмотрим что нам сгенерировали компиляторы (смотреть проще всего в самом начале ф-ции compress32)

воскресенье, 28 августа 2011 г.

botan vs crypto++

а вот например собрал давеча на vs2010 под 64битную windows7 две криптолибы с целью померить их производительность и победителя заюзать во всяких своих прожектах

Сборка

Как это в open-source принято, без напильника военного образца ни одна либа из коробки под windows не собирается

botan 1.10.1

Например поскольку у меня установлен python 3.2.1, нужно в configure.py заменить все конструкции вида
except OSError, e: на except OSError as e:
после чего под администратором (иначе оно не может симлинки создать) запустить python configure.py --enable-sse2 --enable-ssse3

crypto++ 5.6.1

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

четверг, 25 августа 2011 г.

crypto lib with avx

а вот скожите мне - есть ли в природе крипто-либы, позволяющие утилизировать AVX ?
я тут давеча собрал botan например - он умеет только ssse3
OpenSSL также имеет для некоторых алгоритмов вставки на asm, но они не первой свежести (2005-2007 годов и в основном под 586 & x86_64, что является весьма размытым понятием в наше время)
неужто все авторы opensource нищеброды никто не озаботился до сих пор поддержкой AVX ?