Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Татарин  
#1 Оставлено : 21 июля 2010 г. 19:34:20(UTC)
Татарин

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.07.2010(UTC)
Сообщений: 6
Откуда: РБ

Привет!
Требуется выделить тело сообщения из файла, подписанного ЭЦП
Предполагаю, что файл состоит из [заголовок ЭЦП+сообщение+"хвост ЭЦП"]
Ранее путем перебора нашел в заголовке нужные байты для определения длины для одной определенной ЭЦП (ИФНС) - но для другой ЭЦП (ПФР) заголовок короче...
Перерыл инет в поисках описания заголовка - увы, нет. Или пока не совсем в теме.
Не подскажите ли куда рыть.


Offline Kirill Sobolev  
#2 Оставлено : 22 июля 2010 г. 21:18:21(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Если подпись в формате CMS, то рыть в сторону RFC5652.
Но лучше эту операцию производить через CryptoAPI.
Техническую поддержку оказываем тут
Наша база знаний
Offline Татарин  
#3 Оставлено : 23 июля 2010 г. 14:43:51(UTC)
Татарин

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.07.2010(UTC)
Сообщений: 6
Откуда: РБ

Kirill Sobolev написал:
Если подпись в формате CMS, то рыть в сторону RFC5652.
Но лучше эту операцию производить через CryptoAPI.


Спасибо, Кирилл. Точно так - CMS, нарыл таки сам - нашел даже программы-арбитры по теме.
Проблема моя в том, что Такском использует древнюю схему хранения данных - для налогового представителя обработка двух-трех тысяч отчетов невозможна. Пишем свои прилады. Еще раз спасибо
Offline Татарин  
#4 Оставлено : 26 июля 2010 г. 18:23:03(UTC)
Татарин

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.07.2010(UTC)
Сообщений: 6
Откуда: РБ

Привет всем!
Поиски привели чайника к пониманию ASN.1 - собственно все решено за нас давным-давно толковыми ребятами - например Project : Ararat Synapse - там есть asn1util.pas (Delphi) or http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c

Кирилл, а книга по теме Вашего предприятия будет? Или уже есть?
Offline Kirill Sobolev  
#5 Оставлено : 26 июля 2010 г. 19:09:03(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
По какой именно теме? Разработка и встраивание СКЗИ?
Техническую поддержку оказываем тут
Наша база знаний
Offline Татарин  
#6 Оставлено : 26 июля 2010 г. 19:26:06(UTC)
Татарин

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.07.2010(UTC)
Сообщений: 6
Откуда: РБ

Kirill Sobolev написал:
По какой именно теме? Разработка и встраивание СКЗИ?


Описание технологии с точки зрения программера. Лично для меня все это черный ящик - как и любое криптование - но так и должно быть. Даже перевод сопутствующих RFC поможет - куплю!!!
Offline Татарин  
#7 Оставлено : 28 июля 2010 г. 13:35:02(UTC)
Татарин

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.07.2010(UTC)
Сообщений: 6
Откуда: РБ

Здесь решение вопроса - потребовался небольшой напильник
Ранее писал, что нужный код в http://www.ararat.cz/synapse/
допишем так:
1. Добавим BlobFile:TMemoryStream // initialization - Create;finalization-Free
2. в процедуре ASNdump добавим флаг setBlob

Применение
procedure TForm4.Button1Click(Sender: TObject);
var
f:TFileStream;
s:AnsiString;

begin
if OpenDialog1.Execute then
begin
f:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
try
SetLength(s,f.Size);
f.Read(s[1],f.Size);
memo1.Lines.Text:=ASNdump(s);
Viewer.LoadFromStream(BlobFile);
finally
f.Free;
s:='';
end;
end;
end;



unit asn1util;
.....

var BlobFile:TMemoryStream; // Здесь может быть все Memo, Binary, ets
implementation

{==============================================================================}
function ASNdump(const Value: AnsiString): AnsiString;
var
i, at, x, n: integer;
s, indent: AnsiString;
il: TStringList;
setBlob:boolean;
begin
setBlob:=false; // флаг наличия "тела сообщения"
...............
...............
if IsBinaryString(s) then // здесь оно и должно быть
begin
if (at=ASN1_OCTSTR) and not SetBlob then // ASN1_OCTSTR - наш признак
begin
BlobFile.Write(s[1],length(s));
SetBlob:=true; // наличие и запись в trye
end;
s := DumpExStr(s);
end;
Result := Result + s;
end;
Result := Result + #$0d + #$0a;
end;
finally
il.Free;
BlobFile.Position:=0; // здесь понятно
end;
end;

{==============================================================================}
initialization
BlobFile:=TMemoryStream.Create;
finalization
BlobFile.Free
end.
end.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.