Re[32]: Шифрование баз данных
От: IT Россия linq2db.com
Дата: 21.07.01 13:28
Оценка:
AO>Я бы на твоем месте поплакал и пошел бы переквалифицироваться в управдомы. Разработчик систем защиты из тебя похоже вообще никакой.

Alex, плиз, соблюдаем корректность.
Если нам не помогут, то мы тоже никого не пощадим.
Re[33]: Шифрование баз данных
От: Alex Ostapenko Россия  
Дата: 21.07.01 17:59
Оценка:
Здравствуйте IT, вы писали:

AO>>Я бы на твоем месте поплакал и пошел бы переквалифицироваться в управдомы. Разработчик систем защиты из тебя похоже вообще никакой.


IT>Alex, плиз, соблюдаем корректность.


OK. Прошу прощения, не сдержался.
Я со своей стороны топик закрываю. WildJammer, если у тебя есть желание еще поспорить, переходи в мыло.
Re[32]: Шифрование баз данных
От: WindJammer  
Дата: 21.07.01 19:08
Оценка:
Здравствуйте Alex Ostapenko, вы писали:


AO>8-( )

AO>Простейшая прикидка: пароль — 10 символов, длина строки текса — 40 символов, запрос вида %blabla%.
AO>Число OR'ов по твоей формуле = 10*(40-6)^2= 10240?!!. (челюсть медленно падает на пол).
Sorry, челюсть можешь медленно подобрать. Немного я общелкнулся в своей формуле. На длину пароля умножать не надо, да в степень чуть поменьше возводить.



WJ>>Ну и, кратко твои итоги:

WJ>>1. БД не вскрыта.

AO>Увы, статистические методы не работают при таком объеме данных.


WJ>>2. Обещано легкое вскрытие при более других объемах.

AO>Угу. Более других — это раз в 20 больше строк, что для нормальной базы совсем небольшое число.
Ok. Предлагаю все-таки установить размеры при которых статические методы сработаю в данном случае. В 20 раз больше это 2тыс. Предлагаю для оценки БД в 10 тыс., так что бы по мелочам не размениваться. Как, согласен?



WJ>>4. Я говорил, что реализация технологии займет около 1 дня кодирования, что значит дешево.


AO>Угу, написать полное считывание базы в память, ее дешифрование и поиск по памяти — те же 1-2 дня работы. Но при этом можно наложить нормальную криптуху и работать оно будет быстрее.


Вот видишь, прошло чуть более недели, а ты уже смог что-то и сам предложить на вопрос e-yes, а сначала говорил не вижу, не вижу... Хотя 1-2 дня, сомнительно…


AO>Ниоткуда это не следует. Мне попадались системы, использующие mdb для сбора логов. Базы там легко получались мегов по 5-10. И стоили эти системы отнюдь не кисло (по паре штук баксов), вот только шифровать там данные никому в голову не приходило.

Вообще-то, я бы не сказал, что 5-10мегов это мног, как и пара штук баксов, MS SQL полторы-то стоит.

AO>>>В общем, как защита от дурака для баз малого размера оно вполне годится, но не более.

WJ>>Ну, зачем же так самокритично. Ну, подлый я, дал маленькую БД, зачем же так убиваться, по этому поводу. :)

AO>Я бы на твоем месте поплакал и пошел бы переквалифицироваться в управдомы. Разработчик систем защиты из тебя похоже вообще никакой.

Ты же сам написал: "...как защита от дурака для баз малого размера оно вполне годится...", базу я тебе послал малого размера, ты ее не сломал, защита устояла, отсюда и следующий вывод...
Re[34]: Шифрование баз данных
От: WindJammer  
Дата: 22.07.01 10:05
Оценка:
AO>Я со своей стороны топик закрываю. WildJammer, если у тебя есть желание еще поспорить, переходи в мыло.


Что и требовалось доказать.



Если вам не противостоят серьезные организации и ваш продукт, который вы защищаете, не имеет широкого распространения, то даже самых примитивных мер будет достаточно, чтобы защититься. Теоретиков много, а вот практиков нет.
Re[34]: Шифрование баз данных
От: Корнилов Григорий Петрович http://kornilow.newmail.ru
Дата: 23.07.01 06:55
Оценка:
Здравствуйте Alex Ostapenko, вы писали:

AO>Я со своей стороны топик закрываю. WildJammer, если у тебя есть желание еще поспорить, переходи в мыло.


Жаль, что мы так и не услышали начальника транспортного цеха ...
Re[35]: Шифрование баз данных
От: The Lex Украина  
Дата: 23.07.01 08:46
Оценка:
Досадно, конечно, что все свелось к банальной перебранке между разработчиками...
Голь на выдумку хитра, однако...
Re[36]: Шифрование баз данных
От: WindJammer  
Дата: 24.07.01 06:47
Оценка:
Здравствуйте The Lex, вы писали:

TL>Досадно, конечно, что все свелось к банальной перебранке между разработчиками...


Во-первых, я бы не сказал: "все свелось", я бы сказал, что все началось с понтоватой оценки одним качеств другого, в то время как давать ее (оценку) никто не просил.
Во-вторых, _перебранки_ настолько обыденны, что к ним давно пора привыкнуть и "фильтровать" их при чтении форумов, IMHO.

А главное, во всем этом обсуждении/базаре/перебранке я лично вижу вполне конкретный результат — предложена элементарнейшая технология шифрования, которая хотя и имеет ряд серьезных ограничений и недостатков, связанных масштабируемостью, показала хороший коэффициент <сложность взлома>/<стоимость реализации>.
Re[37]: Шифрование баз данных
От: The Lex Украина  
Дата: 24.07.01 15:32
Оценка:
Здравствуйте WindJammer, вы писали:

WJ>Здравствуйте The Lex, вы писали:


WJ>Во-вторых, _перебранки_ настолько обыденны, что к ним давно пора привыкнуть и "фильтровать" их при чтении форумов, IMHO.


Оно то конечно так, но от того не менее обидно... :)

WJ>А главное, во всем этом обсуждении/базаре/перебранке я лично вижу вполне конкретный результат — предложена элементарнейшая технология шифрования, которая хотя и имеет ряд серьезных ограничений и недостатков, связанных масштабируемостью, показала хороший коэффициент <сложность взлома>/<стоимость реализации>.


Хм... Увы, я этой технологии не увидел. Скорее всего, я недостаточно хорошо внимательно "фильтровал"... :)
Голь на выдумку хитра, однако...
Re[38]: Шифрование баз данных
От: WindJammer  
Дата: 25.07.01 06:20
Оценка:
Здравствуйте The Lex, вы писали:

WJ>>А главное, во всем этом обсуждении/базаре/перебранке я лично вижу вполне конкретный результат — предложена элементарнейшая технология шифрования, которая хотя и имеет ряд серьезных ограничений и недостатков, связанных масштабируемостью, показала хороший коэффициент <сложность взлома>/<стоимость реализации>.


TL>Хм... Увы, я этой технологии не увидел. Скорее всего, я недостаточно хорошо внимательно "фильтровал"... :)


:)
Я не писал, что показал технологию, я писал, что предложил, а до вас никто желание увидеть ее не излагал...

Ниже класс, который выполняет шифрование.



// Crypto.h: interface for the CCrypto class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CRYPTO_H__67A3B55E_F3A0_44AD_BAFC_DF3F41A3B1DF__INCLUDED_)
#define AFX_CRYPTO_H__67A3B55E_F3A0_44AD_BAFC_DF3F41A3B1DF__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CCrypto
{
public:
CString EnCrypt(CString str);
CString Crypt(CString str);
CString DoCrypt(CString str, bool bCrypt);
CString DoCrypt(CString str, bool bCrypt, int iLen);
CString m_strKey;
CCrypto();
virtual ~CCrypto();

protected:
TCHAR Wrap(TCHAR tc1, TCHAR tc2, int iWay);
TCHAR m_aTable[155];
};

#endif // !defined(AFX_CRYPTO_H__67A3B55E_F3A0_44AD_BAFC_DF3F41A3B1DF__INCLUDED_)




// Crypto.cpp: implementation of the CCrypto class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CryptoExm.h"
#include "Crypto.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
const int s_nTable=143;
CCrypto::CCrypto()
{
m_aTable[0]='A';
m_aTable[1]='a';
m_aTable[2]='B';
m_aTable[3]='b';
m_aTable[4]='C';
m_aTable[5]='c';
m_aTable[6]='D';
m_aTable[7]='d';
m_aTable[8]='E';
m_aTable[9]='e';
m_aTable[10]='F';
m_aTable[11]='f';
m_aTable[12]='G';
m_aTable[13]='g';
m_aTable[14]='J';
m_aTable[15]='j';
m_aTable[16]='H';
m_aTable[17]='h';
m_aTable[18]='I';
m_aTable[19]='i';
m_aTable[20]='K';
m_aTable[21]='k';
m_aTable[22]='L';
m_aTable[23]='l';
m_aTable[24]='M';
m_aTable[25]='m';
m_aTable[26]='N';
m_aTable[27]='n';
m_aTable[28]='O';
m_aTable[29]='o';
m_aTable[30]='P';
m_aTable[31]='p';
m_aTable[32]='R';
m_aTable[33]='r';
m_aTable[34]='S';
m_aTable[35]='s';
m_aTable[36]='T';
m_aTable[37]='t';
m_aTable[38]='Q';
m_aTable[39]='q';
m_aTable[40]='Y';
m_aTable[41]='y';
m_aTable[42]='U';
m_aTable[43]='u';
m_aTable[44]='W';
m_aTable[45]='w';
m_aTable[46]='X';
m_aTable[47]='x';
m_aTable[48]='Z';
m_aTable[49]='z';
m_aTable[50]='V';
m_aTable[51]='v';
m_aTable[52]='А';
m_aTable[53]='а';
m_aTable[54]='Б';
m_aTable[55]='б';
m_aTable[56]='В';
m_aTable[57]='в';
m_aTable[58]='Г';
m_aTable[59]='г';
m_aTable[60]='Д';
m_aTable[61]='д';
m_aTable[62]='Е';
m_aTable[63]='е';
m_aTable[64]='Ж';
m_aTable[65]='ж';
m_aTable[66]='З';
m_aTable[67]='з';
m_aTable[68]='И';
m_aTable[69]='и';
m_aTable[70]='Й';
m_aTable[71]='й';
m_aTable[72]='К';
m_aTable[73]='к';
m_aTable[74]='Л';
m_aTable[75]='л';
m_aTable[76]='М';
m_aTable[77]='м';
m_aTable[78]='Н';
m_aTable[79]='н';
m_aTable[80]='О';
m_aTable[81]='о';
m_aTable[82]='П';
m_aTable[83]='п';
m_aTable[84]='Р';
m_aTable[85]='р';
m_aTable[86]='С';
m_aTable[87]='с';
m_aTable[88]='Т';
m_aTable[89]='т';
m_aTable[90]='У';
m_aTable[91]='у';
m_aTable[92]='Х';
m_aTable[93]='х';
m_aTable[94]='Ф';
m_aTable[95]='ф';
m_aTable[96]='Ш';
m_aTable[97]='ш';
m_aTable[98]='Щ';
m_aTable[99]='щ';
m_aTable[100]='Ц';
m_aTable[101]='ц';
m_aTable[102]='Ч';
m_aTable[103]='ч';
m_aTable[104]='Ь';
m_aTable[105]='ь';
m_aTable[106]='Ы';
m_aTable[107]='ы';
m_aTable[108]='Ъ';
m_aTable[109]='ъ';
m_aTable[110]='Э';
m_aTable[111]='э';
m_aTable[112]='Ю';
m_aTable[113]='ю';
m_aTable[114]='Я';
m_aTable[115]='я';
m_aTable[116]=' ';
m_aTable[117]='.';
m_aTable[118]=',';
m_aTable[119]='!';
m_aTable[120]='=';
m_aTable[121]=';';
m_aTable[122]=':';
m_aTable[123]='+';
m_aTable[124]='(';
m_aTable[125]=')';
m_aTable[126]='*';
m_aTable[127]='Ё';
m_aTable[128]='ё';
m_aTable[129]='-';
m_aTable[130]='0';
m_aTable[131]='1';
m_aTable[132]='2';
m_aTable[133]='3';
m_aTable[134]='4';
m_aTable[135]='5';
m_aTable[136]='6';
m_aTable[137]='7';
m_aTable[138]='8';
m_aTable[139]='9';

m_aTable[140]='$';
m_aTable[141]='^';
m_aTable[142]='&';
}

CCrypto::~CCrypto()
{

}

//
CString CCrypto::Crypt(CString str)
{
return DoCrypt(str, true);
}

CString CCrypto::EnCrypt(CString str)
{
return DoCrypt(str, false);
}


//

TCHAR CCrypto::Wrap(TCHAR tc1, TCHAR tc2, int iWay)
{
int i, i1, i2;
i1=i2=-1;
for(i=0;i<s_nTable;i++)
{
if(m_aTable[i]==tc1)
i1=i;
if(m_aTable[i]==tc2)
i2=i;
}
if(i1<0 || i2<0)
return tc1;
i=i1+iWay*i2;
if(i>=s_nTable)
i-=s_nTable;
if(i<0)
i+=s_nTable;
return m_aTable[i];
}

CString CCrypto::DoCrypt(CString str, bool bCrypt)
{
int iLen;
iLen=str.GetLength();
return DoCrypt(str,bCrypt,iLen);
}

CString CCrypto::DoCrypt(CString str, bool bCrypt, int iLen)
{
CString strRet, strKey;
int iLenKey, i, j, iCrypt;
iCrypt=(bCrypt ? 1 : -1);
bool bWay;
strKey=m_strKey;
iLenKey=strKey.GetLength();
if(iLenKey<1)
return str;
i=iLen-iLenKey;
bWay=(i<0);
i=iLen/iLenKey;
j=iLen-i*iLenKey;

for(i=0;i<iLen;i++)
{
strRet+=Wrap(str.GetAt(i),strKey.GetAt(j),iCrypt);
if(bWay)
{
j++;
if(j==iLenKey)
j=0;
}
else
{
j--;
if(j<0)
j=iLenKey-1;
}
}


return strRet;

}
Re[39]: Шифрование баз данных
От: Alex Ostapenko Россия  
Дата: 25.07.01 07:26
Оценка:
Здравствуйте WindJammer, вы писали:

WJ>Ниже класс, который выполняет шифрование.


<skip>

Мда, тут я все же не сдержусь. :)
Ты про такие вещи как static или функция strchr когда-нибудь слышал? :)
Я бы постеснялся вставлять такой дубовый код в коммерческий продукт и выставлять его напоказ.
Re[40]: Шифрование баз данных
От: WindJammer  
Дата: 25.07.01 14:44
Оценка:
Здравствуйте Alex Ostapenko, вы писали:

AO>Мда, тут я все же не сдержусь. :)

А надо было. А то опять вспомнят про твои порывы расшифровать БД на раз-два... Ты сам забыл, что ли?


AO>Ты про такие вещи как static или функция strchr когда-нибудь слышал? :)

AO>Я бы постеснялся вставлять такой дубовый код в коммерческий продукт и выставлять его напоказ.
А это говорит о том, что ты относишься именно к той большой категории теоретиков умников.
Re[40]: Шифрование баз данных
От: WindJammer  
Дата: 25.07.01 15:13
Оценка:
Здравствуйте Alex Ostapenko, вы писали:

AO>Ты про такие вещи как static или функция strchr когда-нибудь слышал? :)

AO>Я бы постеснялся вставлять такой дубовый код в коммерческий продукт и выставлять его напоказ.

Что-то я погорячился в прошлом постинге и забыл о главном.

Перепиши код с помощь любых функций и попробуй доказать, что код стал хотя бы на процентов на 10 быстрей, когда докажешь, я задам тебе вопрос, почему ты не пишешь на ассемблере, это же даст еще более эффективный код. Хотя я и уверен, что это ты сделать не в состоянии.
Re[41]: Шифрование баз данных
От: WindJammer  
Дата: 25.07.01 15:38
Оценка:
/*
Опять поспешил жать «Отправить»
*/

Я уже тебе намекал на то, что не плохо бы в диалоге, при оценки кода, технологий и т.д., использовать более иные термины, чем «изврат», «дубовый»... Причем, желательно, что бы оценка была критериальной, а не так, как у тебя получалось до этого.

Так что, ждем с нетерпением твоих выкладок, объясняющих твое понимание слова «дубовый».

Да, и еще. Если решишься показать преимущество применения других функций в представленом алгоритме, сначала потренируйся дома, проценты посчитай, а только потом говори, что готов доказать, а то лажанешься, как прошлый раз с расшифровкой.
Re[39]: Шифрование баз данных
От: The Lex Украина  
Дата: 25.07.01 16:09
Оценка:
Здравствуйте WindJammer, вы писали:

WJ>Ниже класс, который выполняет шифрование.


WJ>// Crypto.h: interface for the CCrypto class.

WJ>//
WJ>// И еще много разного кода...

Уважаемый господин WindJammer. Надеюсь Вы понимаете, что подобного кода можно написать неисчислимое количество вариантов. Суть от этого особо не изменится. Как и его ценность.

Меня же интересует не технология шифрования некоторых массивов данных, например, строк, а технология применения Вашего великолепного класса в самой базе данных. Каким образом Вы производите подключение всего этого к файлу *.mdb? Каким образом происходит работа клиента с базой данных? Возможна ли работа с базой данных посредством самого Access? Вот какие соображения было бы в высшей степени занимательно от Вас услышать...

С глубоким уважением...
Голь на выдумку хитра, однако...
Re[41]: Шифрование баз данных
От: Alex Ostapenko Россия  
Дата: 25.07.01 17:32
Оценка:
Здравствуйте WindJammer, вы писали:

WJ>Здравствуйте Alex Ostapenko, вы писали:


AO>>Ты про такие вещи как static или функция strchr когда-нибудь слышал? :)

AO>>Я бы постеснялся вставлять такой дубовый код в коммерческий продукт и выставлять его напоказ.

WJ>Что-то я погорячился в прошлом постинге и забыл о главном.


Я смотрю,ты только и делаешь, что горячишься.

WJ>Перепиши код с помощь любых функций и попробуй доказать, что код стал хотя бы на процентов на 10 быстрей, когда докажешь, я задам тебе вопрос, почему ты не пишешь на ассемблере, это же даст еще более эффективный код. Хотя я и уверен, что это ты сделать не в состоянии.


Влом. Мне сайчас и других забот хватает. Приведу лишь пару мест, в которых напрашиваются явные замены:
1)
m_Table[0]='A'
....

Прекрасно заменяется на
const static char m_Charset[]="Aa...."; Это и быстрее работает и код уменьшает и смотрится намного лучше.

2) if(m_Table[i]==tc1) меняем на
pc1=strchr(m_Charset,tc1). Это тоже работает быстрее. Поиск второго символа вообще выносится в инициализацию, т.к. пароль постоянен в процессе шифрования.

Дальше меня просто уже заломало смотреть, думаю, что можно было бы найти еще не одно место, которое можно оптимизировать. Прирост производительности можешь сам оценить (есть большое подозрение, что он явно превзойдет 10%).

3) Если ты хочешь еще побиться за скорость, то строка символов один раз преобразуется в массив индексов, а символ потом используется как индекс в этом массиве (не слишком красиво, но суть излагает). Впрочем, и это не предел. Можно создать массивы подстановок алфавита для всех символов пароля — это будет быстрее всего, но памяти много будет кушать.

Что касается моего несостояния писать на асме, спорить особо не буду, т.к. тут я действительно не очень силен — размер моей максимальной проги на асме PDP-11 в сорцах составлял всего лишь 25kb. Asm x86 я просто не люблю за его крайнюю нелогичность по сравнению с PDPшным, да и писать мне на нем почти ничего не приходится. Разве что пару кейгенов написал, да один эмулятор timehasp'а вставил в прогу.:)
Re[40]: Шифрование баз данных
От: WindJammer  
Дата: 26.07.01 04:02
Оценка: -1
Здравствуйте The Lex, вы писали:

TL>Надеюсь Вы понимаете, что подобного кода можно написать неисчислимое количество вариантов. Суть от этого особо не изменится. Как и его ценность.

Да.

TL>Меня же интересует не технология шифрования некоторых массивов данных, например, строк, а технология применения Вашего великолепного класса в самой базе данных.

Перед записью шифровать, после чтения расшифровывать, перед передачей подстроки поиска ее преобразовывать.
TL>Каким образом Вы производите подключение всего этого к файлу *.mdb?
Чего всего к mdb?
TL>Каким образом происходит работа клиента с базой данных?
Через ADO, например.
TL>Возможна ли работа с базой данных посредством самого Access?
Нет



E-yes, достаточно точно описал проблему. Он написал, что нельзя шифровать строки самостоятельно, поскольку используется контекстный поиск. Я предложил шифровать строки самостоятельно, а при контекстном поиске подставлять предварительно преобразованный запрос.
Все дальнейше обсуждение возникло только благодаря пытливому уму Алекса. С целью показать, что практика отличается от теории, что за несколько часов можно добавить в приложение функции шифрования, взлом которых... (повторяться не буду). Я ни разу не сказал, что это мое ной-хау, я почеркивал, что это элементарнейшая технология. /* это комментарии к вашей ирони */
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.