Разработка проекта автоматизации обработки звонков и сообщений

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    3,68 Мб
  • Опубликовано:
    2013-10-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка проекта автоматизации обработки звонков и сообщений

Реферат

Дипломный проект с., слайдов, рис., табл., источников.

АНАЛИЗ СУЩЕСТВУЮЩИХ РЕШЕНИЙ, РАЗРАБОТКА АЛГОРИТМОВ И ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ, ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЮ, ЭКОНОМИЧЕСКАЯ ЭФФЕКТИВНОСТЬ, РАСЧЕТ ЗАЗЕМЛЕНИЯ

автоматизация программный звонок сообщение

Целью дипломного проекта является сокращение среднего времени, затрачиваемого на телефонное соединение, повышение производительности работы менеджеров.

В процессе работы были проанализированы существующие решения, программные сервера телефонии, системы управления предприятием. Также было разработано законченное решение для управления голосовыми вызовами из программ 1С:Предприятие, произведен расчет экономической эффективности от внедрения системы на предприятии, произведен расчет защиты от статического электричества при работе с компьютером.

Задачей программного комплекса является автоматизация процесса получения и передачи сообщений между центром обработки звонков и клиентами. Под сообщениями в данном случае понимаются голосовые телефонные вызовы, смс сообщения и факсы.

Введение

В современном мире важное место занимает эффективность работы компании и ее сотрудников. Чем выше эффективность работы, тем больший доход получает предприятие. Для получения максимальной продуктивности работы необходимо максимально автоматизировать все функции, выполняемые сотрудником. В таком случае сократится время выполнения поставленной задачи, а значит и издержки на ее выполнение.

Во многих компаниях сейчас имеются центры обработки вызовов. В одних компаниях они осуществляют техническую поддержку клиентов, в других занимаются продажами. Но какие бы задачи они не выполняли, центры обработки звонков всегда обрабатывают большое количество сообщений с клиентами. Сообщения могут быть самыми различными: телефонные, факсимильные, посредством электронной почты. Однако самыми частыми являются телефонные соединения, и на их долю приходится основной объем работы. При этом в большинстве компаний они меньше всего автоматизированы. Обычно в центре обработки вызовов имеется система ведения учета и большое количество телефонов для сотрудников. При необходимости позвонить клиенту сотрудник находит его в справочнике и вручную набирает номер на телефоне. Часто бывает так, что клиент не отвечает или просит перезвонить попозже. В таком случае разговор может длиться меньшее количество времени, чем сотрудник потратил поиск и набор номера. При входящем звонке от клиента сотрудник не сможет оперативно ответить на вопрос клиента, поскольку ему потребуется время на поиск информации о клиенте в системе ведения учета. В это время клиенту придется ждать, пока его смогут проконсультировать, что негативно отразится на его мнении о компании. Исключение могут составить лишь небольшие компании с крайне малым числом клиентов. Анализ работы такого центра обработки звонков покажет неудовлетворительные результаты. Большое количество времени будет тратиться на однообразную работу, которая хорошо поддается автоматизации. Автоматизация позволит заметно увеличить эффективность работы сотрудников при работе с клиентами. Если убрать время на поиск и набор номера, поиск информации о клиенте, то среднее время звонка значительно сократится. При этом уменьшится число сотрудников, необходимых для обеспечения работы центра обработки вызовов, что позволит компании получить дополнительный доход.

На данный момент существуют решения для автоматизации телефонных соединений. Они включают в себя систему ведения учета и автоматизированную телефонную станцию. Общий недостаток таких систем - направленность на большие предприятия и, соответственно, высокая стоимость как самого решения, так и его внедрения. Для среднего и малого бизнеса на данный момент не существует решений, доступных по стоимости и близких по функциональности к профессиональным системам автоматизации телефонных соединений. Представленные на рынке системы для среднего и малого бизнеса дают возможность автоматизировать крайне ограниченное количество действий сотрудника. Разработка системы автоматизации работы центра по обработке телефонных соединений с приемлемой стоимостью и широкой функциональностью на данный актуальна. Такая система будет пользоваться спросом у компаний, имеющих в своем составе центры обработки телефонных соединений.

Раздел 1. «Специальный»

.1      Обзор существующих программных продуктов

В данном дипломном проекте разрабатывается программный комплекс интеграции телефонии в 1С:Предприятие для автоматизации работы центра обработки вызовов. В результате появляется возможность совершать и принимать звонки прямо из 1С. При этом не тратится время на набор номера телефона при исходящем вызове и на поиск информации о клиенте при входящем. Ведь при такой интеграции можно позвонить, просто нажав мышкой номер телефона в базе 1С, а при входящем звонке определять клиента по номеру телефона и моментально открывать карточку клиента со всеми данными о нем.

В качестве сервера телефонии используется AsteriskIP-PBX. В качестве системы ведения учета - 1С:Предприятие. Данные программные продукты выбраны путем глубокого анализа существующих продуктов. Существует множество решений телефонии и систем учета. Самыми известными серверами телефонии являются Cisco, Avaya, Asterisk и Infinity. Рассмотрим их подробнее.предоставляет комплексное решение, включающее вычисление, сеть, сеть хранения данных, безопасность и сервисы L4-7. Кроме того, они предоставляют большое количество опций и много возможностей масштабирования центров обработки данных. Cisco предоставляет FEX (Fabric Extenders) для Gigabit Ethernet, унифицированные порты. С помощью DCB (Data Center Bridging) позволяет основанной на Ethernet сети транспортировать трафик LAN/SAN.Однако настройка потребует значительных материальных затрат от компании. Так же, даже имея на руках инструкцию, далеко не каждый системный администратор сможет разобраться в начинке. Для администрирования этой системы необходимо приобрести лицензию, а так же оплатить обучение своего специалиста, либо вызвать для наладки специалиста из Cisco, что тоже далеко не дешево. Добавление новых пользователей, расширение количества IP-телефонов и т.д. стоит вложений. А для того, чтобы установить дополнительные модули интерфейсов VOIP, FANSO или другие платы, компании потребуются дополнительные лицензии. Cisco производит собственное оборудование, так что если компании не хватает бюджета для полностью укомплектованного АТС с соответствующей маркировкой, возможности поставить себе ПО так же отпадает. Cisco адекватно работают с любой АТС, но вот с АТС Cisco - работают далеко не все IP-телефоны. Cisco предлагаетполныйкомплектвиртуализированныхпродуктов: Cisco Nexus 1000V Series Switches, Virtualized Security Gateway (VSG), virtual network access module (vNAM) и Virtual Wide Area Application Services (vWAAS). Но расширяемость ПО Cisco серьезно ограничена, когда дело доходит до интеграции единых поставщиков связи.похожа на Cisco в плане предоставляемых услуг. Это такая же готовая АТС с оборудованием собственного производства. Надежность здесь, как правило, исходит из стоимости. Настроить её может обученный специалист, если разберется в такой же замысловатой инструкции. Call-центр Avaya применяет технологии распознавания человеческого голоса, что при исходящем обзвоне увеличивает количество соединений с человеком, а не с IVR, факсом или голосовой почтой. Avaya работает с системой Communication Manager, которая в свою очередь вышла из MutiVantage. Из-за чего, по моему мнению, имеется много ненужных по сути функций, настроек и т.д. Например, то же качество документации изрядно страдает.выигрывает удобством и простотой: у неё большой функционал по статистики, по сбору информации из IVR. В отличие от других платформ с преимущественно древовидным IVR-меню, Infinity постарались и сделали его графическим. Оно хорошо визуализировано, а это не только приятно глазу, но и удобно. Огромным минусом является то, что Infinity работает на Windows, в то время как остальные предпочитает более надежный Linux. Для Asterisk тоже есть подобные интерфейсы, но они идут в виде отдельных модулей, в том числе и OpenSource.более всего выделяется из этой группы одним существенным показателем: на ПО Asterisk не нужны дополнительные лицензии, как при подключение дополнительных SIP-номеров, так и при интеграции с подключаемыми модулями[1]. Тем более, найти соответствующие темы в форумах по настройке Asterisk может любой системный администратор. Инструкции в разы понятнее и удобнее [2]. А значит, не надо тратить лишние деньги на обучение или вызов технической поддержки.

У системы автоматизации 1С:Предприятие так же существует довольно много конкурентов:

-  ИНФИН;

-       Парус;

-       Галактика;

-       БЭСТ;

-       ИнфоБухгалтер;

-       Турбо Бухгалтер (он же ТБ Корпорация);

-       Компас;

-       КомТех;

-       Инотек;

-       ИнфоСофт (продукт Флагма);

-       Омега;

-       Контур;

-       SAP;

-       Oracle.

Самой распространенной системой управления предприятием в крупном бизнесе является SAP. Доля данного программного продукта составляет 49,6 % от всего рынка интегрированных систем управления предприятием. За ним идет Oracle с 14,9 % и 1С:Предприятие с 14,4 %. Однако, в среднем и малом бизнесе картина кардинально меняется. Лидером в этом секторе является 1С:Предприятие, имеющееся практически у каждой компании.

Исходя из полученных данных и специфики работы компании было решено разработать систему автоматизации телефонных соединений на базе 1С и Asterisk. На данный момент уже имелось несколько разработок от сторонних компаний. Среди них самыми известными являются:

-  1С-Рарус:СофтФон;

-       Панель телефонии Asterisk 1С от MyAsterisk;

-       1С:Телефония от Simplit.

Рассмотрим каждый продукт подробнее.

Программный продукт «1С-Рарус: СофтФон, Проф, ред. 1» выпускается компанией «1С-Рарус». Решение обеспечивает интеграцию телефонной системы с CRM-модулем типовых конфигураций «1С:Предприятие 8.0». Тесная интеграция телефонной системы с CRM-системой обеспечивает быстрый доступ к информации о клиенте и способствует внедрению CRM-технологий (CRM - Customer Relations Management). Программа помогает в работе диспетчерского отдела, справочной службы, отдела продаж и маркетинга.

Панель телефонии Asterisk 1С от MyAsterisk обеспечивает связь между 1С:Предприятие и IP АТС на базе телефонии Asterisk 1.6 и выше. Реализованы следующие возможности:

-  прием звонков в 1С;

-       звонки из 1С телефонии;

-       встроенный софтфон;

-       удержание вызовов;

-       перевод вызовов;

-       отображение информации о звонящем;

-       автоматическое открытие карточки;

-       привязка клиентов по номеру телефона на определенного менеджера;

-       прослушивание записей разговоров из 1С Asterisk;

-       отправка факсов из 1С через Fax Asterisk;

-       прием СМС в 1С.

1С:Телефония от Simplit представляет из себя дополнительную DLL-библиотеку для 1С, с помощью которой организован сетевой обмен данными с сервером IP-телефонии на базе Asterisk. Функции аналогичны панели телефонии Asterisk 1С от MyAsterisk.

Если рассматривать данные программные продукты более детально, то оказывается, что ни один из них не подходит под все требования. 1С-Рарус:СофтФон не может работать с Asterisk. Панель телефонии Asterisk 1С от MyAsterisk не поддерживает современный управляемый режим запуска 1С и, соответственно, не будет работать в браузере и в тонком клиенте.Управляемые формы - новая концепция интерфейса программ 1С, позволяющая, кроме всего прочего, работать через браузер. В ближайшее время все программы 1С: Предприятие перейдут на управляемые формы. Так же у нее отсутствует шифрование данных, что делает небезопасной работу через интернет. 1С:Телефония от Simplit подходит практически всем, однако большая часть логики перенесена в 1С, что не эффективно. К тому же компания Simplit находится в Киеве и в основном ориентирована на Украину. Таким образом, техническая поддержка и сопровождение их продукта в России будет значительно затруднено.

Проанализировав недостатки существующих систем интеграции телефонии, было решено разработать собственный продукт, лишенный этих недостатков. При разработке учитывалась возможность работы в разных конфигурациях 1С:Предприятия и разных режимах запуска. Выбор языка разработки C# позволит, при необходимости, быстро разработать компоненту соединения с сервером для других операционных систем и даже для мобильных устройств (смартфонов). Поддерживаются все новые версии сервера телефонии, начиная с 1.4 и все 103 команды управления сервером, что позволяет адаптировать решение под любые требования клиента. Так же реализовано шифрование соединения с сервером телефонии.

.2 Выбор среды разработки

Интегрированная среда разработки, ИСР (англ. IDE, Integrated development environment или integrated debugging environment) - система программных средств, используемая программистами для разработки программного обеспечения (ПО) [4].

Среда разработки включает в себя:

-   текстовый редактор;

-          компилятор и/или интерпретатор;

-          средства автоматизации сборки;

-          отладчик.

ИСР иногда содержит также средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов - для использования при объектно-ориентированной разработке ПО. Хотя и существуют ИСР, используемые для нескольких языков программирования - такие, как Eclipse, NetBeans, Embarcadero RAD Studio, Qt Creator или Microsoft Visual Studio, но обычно в ИСР используется один определённый язык программирования - как, например, Visual Basic, Delphi, Dev-C++.

Частный случай ИСР - среды визуальной разработки, которые включают в себя возможность визуального редактирования интерфейса программы.

Интегрированные среды разработки были созданы для того, чтобы максимизировать производительность программиста благодаря тесно связанным компонентам с простыми пользовательскими интерфейсами. Это позволит разработчику сделать меньше действий для переключения различных режимов, в отличие от дискретных программ разработки. Однако, так как IDE является сложным программным комплексом, то лишь после долгого процесса обучения среда разработки сможет качественного ускорить процесс разработки ПО.обычно представляет из себя единственную программу, в которой проводилась вся разработка. Она обычно содержит много функций для создания, изменения, компилирования, развертывания и отладки программного обеспечения. Цель среды разработки заключается в том, чтобы абстрагировать конфигурацию, необходимую, чтобы объединить утилиты командной строки в одном модуле, который позволит уменьшить время, чтобы изучить язык, и повысить производительность разработчика. Также считается, что трудная интеграция задач разработки может далее повысить производительность. Например, IDE позволяет проанализировать код и тем самым обеспечить мгновенную обратную связь и уведомить о синтаксических ошибках. В то время как большинство современных IDE является графическим, они использовались еще до того, как появились системы управления окнами (которые реализованы в Microsoft Windows или X11 для *nix-систем). Они были основаны на тексте, используя функциональные клавиши или горячие клавиши, чтобы выполнить различные задачи (например, Turbo Pascal). Использование IDE для разработки программного обеспечения является прямой противоположностью способа, в котором используются несвязанные инструменты, такие как vi (текстовый редактор), GCC (компилятор), и т.п.

На данный момент существуют несколько сред для разработки приложений на языке C#, основные из них приведены в таблице 1.1.

Таблица 1.1 - Сравнение сред разработки C#

Среда разработки

Разработчик

Платформа

Лицензия

Geany

Team

UNIX / Windows

GPL

Microsoft Visual Studio

Microsoft

Windows

Закрытая

MonoDevelop

Novell и Mono community

Cross-platform

GPL

SharpDevelop

ICSharpCode Team

Windows

LGPL


Лицензия GPL предоставляет пользователю права копировать, модифицировать и распространять (в том числе на коммерческой основе) программы (что по умолчанию запрещено законом об авторских правах), а также гарантирует, что и пользователи всех производных программ получат вышеперечисленные права.

Лицензия LGPL позволяет линковать с данной библиотекой или программой программы под любой лицензией, несовместимой с GNU GPL, при условии, что такая программа не является производной от объекта, распространяемого под (L)GPL, кроме как путём линкования. Главное различие между GPL и LGPL в том, что последняя позволяет и такое линкование с данным объектом других, которое создаёт производную от данного работу, если лицензия слинкованных объектов позволяет «модификации для внутреннего использования потребителем и обратную разработку для отладки таких модификаций». Т.е. LGPL, в отличие от GPL позволяет связывание библиотеки с любой программой, не обязательно свободной.

Закрытое (проприетарное) программное обеспечение (англ. proprietary software) - программное обеспечение, являющееся частной собственностью авторов или правообладателей и не удовлетворяющее критериям свободного ПО (наличия открытого программного кода недостаточно). Правообладатель проприетарного ПО сохраняет за собой монополию на его использование, копирование и модификацию, полностью или в существенных моментах. Обычно проприетарным называют любое несвободное ПО, включая полусвободное.- свободная среда разработки программного обеспечения, написанная с использованием библиотеки GTK2. Доступна для следующих операционных систем: BSD, Linux, Mac OS X, Solaris и Windows. Geany распространяется согласно GNU General Public License. Geany не включает в свой состав компилятор. Вместо этого используется GNU Compiler Collection (или любой другой компилятор) для создания исполняемого кода.Visual Studio - линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, .NET Compact Framework и Microsoft Silverlight. Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов цикла разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).- свободная среда разработки, предназначенная для создания приложений C#, Java, Boo, Nemerle, Visual Basic .NET, Vala, CIL, C и C++. Также планируется поддержка Oxygene со стороны Embarcadero Technologies. Изначально это был порт SharpDevelop на Mono/GTK+, но с того времени проект далеко ушёл от своего начального состояния. MonoDevelop является частью проекта Mono.- свободная среда разработки для C#, Visual Basic .NET, Boo, IronPython, IronRuby, F#, C++. Обычно используется теми, кто не хочет пользоваться Visual Studio .NET. Существует также форк на Mono/Gtk+ - MonoDevelop. SharpDevelop 2.0 предоставляет интегрированный отладчик, который использует собственные библиотеки и взаимодействует с исполняющей средой .NET через COM Interop. Хотя SharpDevelop 2.0 (как и VS2005) использует файлы проекта в формате MSBuild, он по-прежнему может использовать компиляторы от .NET Framework 1.0 и 1.1, а также от Mono.

Для разработки необходимо активно использовать все средства языка программирования. Однако среда MonoDevelop использует собственный компилятор, который не полностью поддерживает язык С# в силу того, что является свободной мультиплатформенной разработкой, независимой от создателей языка. Хотя она и обеспечивает мультиплатформенность, но невозможно предсказать поведение языка в новых версиях. А одной из ключевых составляющих проекта является его отказоустойчивость и стабильность и в то же время мультиплатформенность не требуется (пользователей 1С на Linux исчезающе мало). Поэтому эта среда не подходит для разработки данного проекта. и Geany не имеют собственных компиляторов. Поэтому для разработки с использованием этих сред все равно придется использовать проприетарное ПО, что делает их использование оправданным лишь в некоторых случаях. Например на низкопроизводительных компьютерах или при сильно ограниченном бюджете проекта. Несмотря на то, что что они могут запускаться и работать в ОС Linux, данные среды разработки в силу отсутствия собственных компиляторов не смогут создать мультиплатформенное приложение, и разработка все равно ограничится операционными системами Windows.Visual Studio также не лишена недостатков. Основными из них являются тяжеловесность, требующая довольно большой вычислительной мощности компьютера; платность; отсутствие мультиплатформенности. Несмотря на эти недостатки, Visual Studio остается предпочитаемой средой разработки большинства C# программистов. Причиной этому является полная поддержка языка, расширенные средства разработки, энергично развивающаяся документация и сама среда. Данную среду разработки будем использовать в проекте.

.3 Разработка графического интерфейса пользователя

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

Взаимодействие между панелью телефонии и оператором приобретает большое значение, поскольку оно должно обеспечить взаимопонимание машины и человека. Если взаимопонимание достигнуто, то программный продукт можно считать удачным и универсальным. В свете вышесказанного, выделим основные принципы построения графического интерфейса панели телефонии:

-  простота - возможность интуитивного понимания пользователем элементов интерфейса;

-       использование стандартных элементов 1С - обеспечение единого интерфейса 1С и панели телефонии как в обычном, так и в управляемомприложении;

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

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

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

Приложение разрабатывается для обеспечения работы пользователя, т.е. для того чтобы он с помощью компьютерной программы быстрее и качественнее решал свои производственные задачи. С точки зрения эргономики, самое важное в программе - создать такой пользовательский интерфейс, который сделает работу эффективной и производительной, а также обеспечит удовлетворённость пользователя от работы с программой. Эффективность работы означает обеспечение точности, функциональной полноты и завершённости при выполнении производственных заданий на рабочем месте пользователя. Создание пользовательского интерфейса должно быть нацелено на показатели эффективности. При таком подходе следует избегать такого интерфейса, который не соответствует алгоритму решения пользовательских задач. Необходимо тщательно продумать и осознать сценарий взаимодействия с пользователем, приведя его к оптимальной системе выполнения задач, и реализовать пользовательский интерфейс в соответствии с этой системой.

Производительность работы отражает объем затраченных ресурсов при выполнении задачи, как вычислительных, так и психофизиологических. Дизайн интерфейса должен обеспечивать минимизацию усилий пользователя при выполнении работы и приводить к следующим результатам:

-   сокращению длительности операций звонка выбранному контрагенту;

-          уменьшению времени поиска информации о контрагенте;

-          повышению общей продуктивности пользователя, заключающейся в объёме обработанных звонков за определённый период времени;

-          увеличению длительности устойчивой работы пользователя и др.

Удовлетворённость пользователя от работы тесно связана с комфортностью его взаимодействия с приложением, и способствует сохранению профессиональных кадров на предприятии за счёт привлекательности работы на данном рабочем месте. Требования к удобству и комфортности интерфейса возрастают с увеличением сложности работ и ответственности пользователя за конечный результат. Высокая удовлетворённость от работы достигается в случае:

-    прозрачной для пользователя навигации и целевой ориентации в программе;

-             ясности и чёткости понимания пользователем текстов и значения икон;

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

Исходя из данных требований, выбор интерфейса для проектируемой системы очевиден. Это близкий любому пользователю интерфейс 1С. Он во многом повысит удобство использования при эксплуатации приложения. Также интерфейс 1С отличается простотой настройки и использования.

Разработка интерфейса ведется в конфигураторе 1С. Существуют два типа форм - обычные и управляемые. В режиме управляемого приложения интерфейс не «рисуется», а «описывается». Разработчик определяет только общую схему командного интерфейса и общую схему форм. Это описание платформа использует при построении интерфейса для конкретного пользователя с учетом различных факторов: прав пользователя, особенностей конкретного внедрения, настроек, сделанных самим пользователем.Разрабатываемое приложение должно одинаково работать на обоих типах форм.

Главное окно приложения должно состоять из нескольких функциональных частей. Должно быть главное окно приложения и закладка с настройками подключения. В главном окне необходимо реализовать возможность набрать введенный номер и отклонить звонок. При этом кнопка для принятия звонка не нужна, так как телефон сам оповестит об этом сервер при ответе на звонок. Таким образом, необходимо поле ввода номера телефона с кнопкой очистки и кнопки “Набрать” и “Отбой”. Однако на устройствах с сенсорными экранами неудобно будет для набора номера каждый раз вызывать клавиатуру, поэтому необходим блок кнопок набора номера. Разместим их под полем с номером телефона. Теперь необходимо отображать информацию о собеседнике. Для этого подойдут поля с его номером и именем. Так же необходимо сделать поддержку двух линий. Поэтому добавим еще 2 поля с номером и именем собеседника по второй линии. При отсутствии звонков эти поля нам не требуются, поэтому сделаем их поумолчанию неактивными. При разговоре по первой линии может так случиться, что не будет возможности ответить на входящий вызов по второй. Поэтому для второй линии необходимо сделать быстрый перевод на другого сотрудника. Для этого добавим кнопку “Перевести” для второй линии. При нажатии на кнопку будет появляться выпадающий список с именами остальных сотрудников. При выборе определенного сотрудника будет произведен быстрый (без консультации) перевод звонка. Однако при разговоре может потребоваться перевод на другого сотрудника текущего звонка. Для этого добавим кнопку “Перевести” и для первой линии. Причем, если текущий пользователь на звонок еще не ответил, логичным будет перевести звонок без консультации, то есть без предварительного разговора с другим сотрудником. И напротив, при отвеченном вызове и необходимости перевода правильнее при переводе звонка сначала поговорить с сотрудником о контрагенте, целях звонка, и только потом переводить. Поэтому кнопки “Перевести” для обоих линий будут выполнять немного разные переводы в зависимости от того, был ли входящий вызов отвечен. При отвеченном вызове произойдет перевод с консультацией, при не отвеченном - перевод без консультации. Так же при одновременных звонках на обе линии необходимо давать возможность отклонять любую линию. Поэтому требуется как минимум еще одна кнопка “Отбой”. Однако для избежания перекосов интерфейса и возможных затруднений со стороны пользователя необходимо добавить кнопку “Отбой” и для второй линии. Таким образом получится три кнопки “Отбой” на форме - по одной для каждой линии и одна общая рядом с кнопкой “Набрать” и полем ввода номера телефона. Логично предположить, что общая кнопка должна завершать последний вызов. То есть при одной активной линии она будет завершать текущий звонок, а при двух активных линиях - звонок по второй. Так же необходима кнопка поиска номеров по контрагенту. Расположим ее рядом с полем ввода номера. На этом основная функциональность главного окна реализована. Можно позвонить любому контрагенту, набрав его номер на клавиатуре или на экранных кнопках или же найдя его в списке, окончить телефонное соединение, перевести вызов на другого сотрудника, поддерживать 2 телефонных соединения одновременно.

Однако необходимо дополнительно реализовать возможности по просмотру истории звонков, отправке смс и факса. Кнопку “История звонков” лучше разместить в основной части формы, недалеко от кнопок “Набрать” и “Отбой”. При нажатии на эту кнопку должно выводиться окно с историей звонков на определенную дату.

Не остались рассмотренными две возможности: посылка факса и смс. СМС обычно отправляют вне активного голосового соединения. Поэтому разместим кнопку “СМС” в основной части формы, рядом с кнопкой “История звонков”. При нажатии на кнопку отображается окно с полем ввода текста смс и двумя кнопками: “Послать” и “Отмена”. Номер для отправки берется из поля номер телефона главной формы. Факс же часто бывает необходимо отправить во время разговора, прямо на тот номер, с которым установлено соединение. Поэтому разместим две кнопки “Факс” для первого и второго каналов. При нажатии открывается стандартный диалог выбора файла и пользователем выбирается документ, который и отправляется по факсу. На этом функции основной закладки главного окна закончились.Главное окно панели телефониив управляемом режиме показано на рисунке 1.1.

Рисунок 1.1 - Главное окно панели телефонии

Теперь необходимо рассмотреть закладку “Настройки”. На этой вкладке необходимо собрать все параметры, передаваемые во внешнюю компоненту для подключения и работоспособности панели. Для начала необходимо определиться с адресом сервера телефонии. Для этого добавим два поля ввода: “Адрес астериска” и “Порт AMI (5038)”. 5038 - стандартный порт интерфейса AMI. Далее необходимо авторизоваться на сервере. Для этого добавим еще два поля: “Имя пользователя” и “Пароль”. Следом необходимо поле для указания контекста звонков. Это служебное поле Астериска для правильной адресации. Также необходимо предусмотреть флажок “Открывать карточку” для открытия карточки контрагента при входящем звонке от него и флажок “Отладочные сообщения” для вывода отладочных сообщений при возникновении проблем панелью. В режиме отладочных сообщений будут отображаться в панели служебных сообщений практически все сообщения от внешней компоненты и частично от Астериска. По полученной информации можно быстро локализовать и исправить проблему. Следующим полем будет поле флажка “Не учитывать код города”. При установленном флажке код города будет автоматически выбрасываться из номера. Код города указывается чуть ниже в одноименном поле ввода. Это необходимо, если провайдер телефонии требует строго определенный формат номера телефона. Так же, флажок “Не учитывать код города” необходим, если в информационной базе 1С:Предприятия возможны ситуации, когда код города не заполнен или заполнен неверно. Далее необходимо предусмотреть кнопку “Сохранить”, нажатие на которую сохранит изменения в настройках. Для принятия новых настроек необходимо переподключаться к серверу Asterisk, поэтому добавим кнопку “Переподключиться к серверу” для завершения текущего соединения с сервером и установления нового. Так же при проблемах с соединением необходимо предусмотреть проверку доступности сервера. Для этого добавим кнопку “Пинг соединения с сервером”, нажатие на которую посылает специальный пакет серверу. В случае доступности сервера, установленного соединения и успешной авторизации сервер вернет пакет “Pong”. В окне служебных сообщений появится строка “Был получен ответ сервера Ping: Pong”, а это значит, что сервер телефонии Asterisk доступен и работает. Данная вкладка будет практически одинаково выглядеть как в управляемом режиме запуска 1С:Предприятия, так и в обычном. Настройки панели телефонии в управляемом режиме показаны на рисунке 1.2.

Рисунок 1.2 - Закладка “Настройки”

Нажатие на копку «История звонков» открывает новое окно. В окне истории звонков должно быть поле выбора даты, на которую получаем историю звонков. При изменении даты необходимо сразу же получать историю без дополнительных действий со стороны пользователя. При открытии формы дату следует устанавливать равной текущей дате. Так же в этом окне необходимо отображать табличную часть, в которой описаны сами звонки. В каждой строке - один звонок. Для каждого звонка должны быть указаны:

-    дата и время начала звонка;

-             тип (входящий или исходящий);

-             номера телефонов и имена обеих сторон;

-             длительность звонка;

-             отвечен или нет;

-             дата и время окончания звонка.

Для каждого номера, если он занесен в базу 1С, необходимо дать пользователю возможность вызвать карточку того контрагента или клиента, для которого назначен номер в текущей строке истории звонков. Для этого разместим на форме кнопку “Инфо”. Так же необходимо предоставить возможность позвонить по любому из телефонов в истории (разумеется, кроме телефонов текущего пользователя). Для этого разместим в шапке формы, рядом с полем выбора даты, кнопку “Позвонить”. При нажатии на нее происходит вызов номера, указанного в текущей строчке истории. АТС Asterisk по умолчанию записывает все разговоры, поэтому можно разместить на форме кнопку “Прослушать”. При нажатии на эту кнопку формируется команда Астериску для прослушивания разговора в текущей строке. Астериск, в свою очередь, совершает звонок на телефон пользователя и начинает воспроизводить ранее записанный телефонный вызов при поднятии трубки. На этом функциональность данного окна можно считать исчерпанной. Окно истории звонков в управляемом режиме показано на рисунке 1.3.

Рисунок 1.3 - История звонков

Полученный интерфейс использует только стандартные элементы 1С и построен в едином стиле со всеми конфигурациями. Он интуитивно понятен, не требует глубокого изучения пользователем, удобен и не выбивается из общего стиля интерфейсов 1С.

.4 Разработка алгоритма программы

Для организации обширной и универсальной системы автоматизации звонков следует предусмотреть такой же универсальный алгоритм работы, который не зависел бы от внешних факторов, а определялся только самой системой и её внутренними параметрами.

Поскольку для построения компонентов системы, а также для построения внедряемых в компоненты элементов выбрана технология Microsoft .Net Framework, то следует воспользоваться всеми её преимуществами.

.NET Framework - программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является исполняющая среда Common Language Runtime (CLR), способная выполнять как обычные программы, так и серверные веб-приложения. NET Framework поддерживает создание программ, написанных на разных языках программирования [5].

Основной идеей при разработке .NET Framework являлось обеспечение свободы разработчика за счёт предоставления ему возможности создавать приложения различных типов, способные выполняться на различных типах устройств и в различных средах. Вторым принципом стало ориентирование на системы, работающие под управлением семейства операционных систем Microsoft Windows. Для обеспечения максимальной переносимости компоненты будем использовать только управляемый код C#.

Управляемый код (англ. managed code) - термин, введённый Microsoft для обозначения кода программы, исполняемой под «управлением» виртуальной машины .NET - Common Language Runtime. При этом обычный машинный код называется неуправляемым кодом. Программа для .NET Framework, написанная на любом поддерживаемом языке программирования, сначала переводится компилятором в единый для .NET понятный человеку низкоуровневый язык Common Intermediate Language (CIL) (ранее назывался Microsoft Intermediate Language, MSIL). Затем компилятор производит перевод CIL-кода в объектный байт-код (в терминах .NET получается сборка, англ. assembly), а уже байт-код либо исполняется виртуальной машиной CLR, либо транслируется утилитой NGen.exe в исполняемый код для конкретного целевого процессора. Использование виртуальной машины предпочтительно, так как избавляет разработчиков от необходимости заботиться об особенностях аппаратной части. В случае использования виртуальной машины CLR, встроенный в неё JIT-компилятор «на лету» (just in time) преобразует промежуточный байт-код в машинные коды нужного процессора. Современная технология динамической компиляции позволяет достигнуть высокого уровня быстродействия. Виртуальная машина CLR также сама заботится о базовой безопасности, управлении памятью и системе исключений, избавляя разработчика от части работы.

Для начала рассмотрим основные аспекты протокола AMI. AMI - мощный и удобный программный интерфейс (API) Asterisk для управления системой из внешних программ. Благодаря AMI внешние программы могут осуществлять соединения с Астериском посредством TCP протокола, инициировать выполнение команд, считывать результат их выполнения, а так же получать уведомления о происходящих событиях в реальном времени [3].

Между сервером Астериск и клиентской программой для установления связи используется простой построчный протокол. Пакет, передаваемый от клиента в Астериск сервер и назад, определяется следующими ключевыми характеристиками:

-  Action, пакеты отправляемые клиентом, соединенным с AMI. После обработки сервером такого пакета будет осуществлено некоторое действие. Существуют относительно гибкие ограничения на действия, осуществляемые клиентом. Один пакет - одно действие. В пакете Action должно содержаться имя операции, которую необходимо выполнить, а также все необходимые параметры;

-       Response, определяет ответ, отсылаемый Астериском клиенту по факту выполнения действия;

-       Event, данные, относящиеся к событию, которое сгенерировано внутри ядра Астериска или модуля расширения.

Как правило, клиент отсылает пакеты Action в Астериск (они так же называются командами). Астериск, в свою очередь, выполняет запрос и возвращает результат (часто результат - успешность действия с кратким описанием в случае неудачи), получаемое в пакете Response. Нет гарантии касательно порядка прихода результатов (пакетов Response), поэтому в клиентском запросе обычно включают параметр [ActionID] в каждый пакет Action, при этом соответствующий пакет Response будет содержать такое же значение в поле [ActionID]. Таким образом, клиент может обрабатывать Action и Response пакеты, в любом желаемом порядке, не ожидая пакетов Response, чтобы произвести следующее действие.

Передача данных в AMI похожа на обычный Telnet. Для управления сервером используются пакеты Action, а возвращает он Response или Event. Пакет представляет собой комбинацию строк, разделенных символами перевода строк (CRLF). Окончанием пакета служат два подряд идущих символа перевода строки. Общий формат пакетов управления сервером показан в распечатке 1.1.

Распечатка 1.1: <action type><CRLF>

<key 1>: <value 1><CRLF>

<key 2>: <value 2><CRLF>

.......

<CRLF>

Параметр “action type” указывает название действия. Далее идут пары “ключ: значение”, определяющие необходимые переменные. Аналогичный вид у пакетов Response и Event.

Самым простым решением будет написание процедур, которые будут вызываться из 1С и которые будут посылать серверу сформированный пакет. Таким образом можно значительно уменьшить количество параметров у процедур, так так некоторые пары “ключ: значение” являются константами и их можно задать один раз для всех пакетов.

Одной из таких констант является “ActionID”. Это необязательный, но крайне необходимый параметр. Дело в том, что если к серверу будут подключены одновременно несколько клиентов, то возникнет путаница с ответами. Без “ActionID” невозможно точно определить кому предназначается ответный пакет. Это маркер клиента, который он использует для определения себя из общего потока. Он возвращается сервером в ответных пакетах и так клиент понимает, что пакет предназначается именно ему. Данная константа будет генерироваться случайным при запуске компоненты. Для того, чтобы у двух компонент не было одинаковых “ActionID” выберем числа много большие, чем количество пользователей. Так, максимальное число пользователей будет 50-100, а случайные числа будут порядка 100000-1000000. Таким образом вероятность получения двух одинаковых “ActionID” будет крайне низка.

Для начала необходимо реализовать функцию, получающую строку от сервера. Есть два способа получать данные: посимвольно и построчно. При посимвольном способе в цикле из пришедших данных за раз можно получить только один символ. В ходе тестирования данный метод показал неудовлетворительные результаты: для получения одного символа необходимо пройти полный цикл получения символа от сервера телефонии Asterisk, что приводит к повышенной нагрузке на процессор при большом объеме передаваемых данных. В процессе тестирования наблюдалась полная загрузка процессора уже при восьми активно работающих телефонных аппаратах. При большем количестве использование панели телефонии Asterisk было невозможно. Поэтому в данном программном продукте был выбран второй способ, в котором используется построчное чтение данных от сервера. При построчном чтении данные с сетевой карты сначала помещаются в буфер, а при вызове функции чтения данные из буфера передаются в программу одной строкой, в виде типа String. Для начала необходимо определить какое максимальное количество байт мы можем принять за раз. Для этого используется свойство ServicePoint.ReceiveBufferSize, которое возвращает размер приемного буфера для сокета. Размер буфера будет равен количеству символов в строке, которую мы получим при чтении из него. При этом можно оптимизировать период цикла чтения из буфера, добившись максимальной производительности. Однако, при построчном чтении из буфера часто возникает ситуация, когда количество данных будет больше, чем размер буфера. В таком случае последний пакет от Asterisk может быть не полным, и последующий его разбор может привести к ошибкам. Для исключения этой возможности необходимо при каждом чтении из потока проверять получен ли последний пакет целиком. Проще всего это сделать, найдя последний символ перевода строки и последний двойной символ перевода строки. Если двойной символ будет стоять раньше на 2 символа (“\r\n”), чем простой перевод строки, значит, пакет получен полностью и можно принимать следующие данные. Если же положения символов не совпадают (что в большинстве случаев и происходит), тогда последний пакет получен не целиком, необходимо сохранить его начало и добавить при следующем чтении из потока.Для этого ищется последний двойной символ перевода строки, и в отдельную переменную заносятся все данные, идущие после данного символа. В текущей строке данные, стоящие после символа двойного перевода строки, удаляются. Схема алгоритма подпрограммы получения строки от сервера телефонии показана на рисунке 1.4.

Рисунок 1.4- Схема алгоритма подпрограммы получения строки от Asterisk

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

-   входящий вызов;

-          окончание соединения с абонентом;

-          исходящий вызов для получения названий каналов;

-          история звонков;

-          пакеты “Response”.

Канал - соединение каждого абонента. Он необходим для избегания путаницы когда, например, один абонент принимает одновременно два звонка. Новый канал создается для каждого соединения абонента. Поэтому при разговоре двух абонентов каналов будет два - по одному для каждого абонента.

Остановимся на каждом из видов подробнее. Входящий и исходящий вызовы можно объединить, так как в данном случае будут меняться местами только номера каналов. Для начала необходимо определить пакет. Он будет начинаться со строки “Event: Dial”. Примертекста пакета, посылаемого сервером телефонии при звонке с номера 36 на 34, приведен в распечатке 1.2.

Распечатка 1.2: Dial: call,all: Begin: SIP/36-0000054d: SIP/34-0000054e: 36: Sergey Shimkov: 1322047772.2227: 1322047772.2228

Dialstring: 34

ПараметрыChannelиDestinationуказываютнаканалы, которыесоздалисьпризвонке. Они потребуются для того, чтобы была возможность перевести звонок. При переводе звонка необходимо использовать именно каналы, а не номера телефонов. Ссылки на каналы отображаются как [протокол, на котором происходит звонок]/[номер абонента]-[случайные символы]. Таким образом,определяется следующая схема действий:

-   найти пакет в потоке, определить его начало и конец;

-          попытаться найти строку в пакете: “Destination: ” + SIP/[наш номер]. Если найдена, значит это входящий звонок и тогда Destination - наш канал, Channel - канал звонящего;

-          попытаться найти строку в пакете: “Channel: ” + SIP/[наш номер]. Если найдена, значит это исходящий звонок и тогда Destination -канал звонящего, Channel - наш канал;

-          проверить, занята ли первая линия. Если свободна, тогда сохранить значения каналов как звонка по первой линии, иначе по второй;

-          вызвать внешнее событие в 1С, оповестить о входящем звонке и сообщить номер.

Далее рассмотрим ситуацию прекращения звонка. Текст пакетаот Asterisk с сообщением об окончании телефонного соединения показан в распечатке 1.3.

Распечатка 1.3: Hangup: call,all: SIP/34-0000054e: 1322047772.2228: 34: <unknown>: 16txt: Normal Clearing

Пакетс сообщением об окончании телефонного соединения начинаетсясостроки “Event: Hangup”. Соответственно будем искать пакет с таким началом. Параметр Channel указывает на канал, с которого повесили трубку. Алгоритм будет следующим:

-   найти пакет, начинающийся со строки “Event: Hangup” в потоке, определить его начало и конец;

-          попытаться найти строку в пакете: “Channel: ” + [наш канал]. Проверить во всеми запомненными каналами (максимум четыре). Если найдена, значит очистить;

-          вызвать внешнее событие в 1С, оповестить о входящем звонке и сообщить номер.

Необходимо добавить, что звонок может быть инициализирован не только нашей компонентой, но и обычным телефонным аппаратом. А значит нельзя опираться на “ActionID”.Схема алгоритмапроверки начала вызова показана на рисунке 1.5.

Рисунок 1.5- Схема алгоритма подпрограммы проверки начала вызова

Запрос истории звонков так же происходит через пакеты Action, а сама история звонков возвращается Event пакетами. Период истории звонков в стандартной реализации можно установить равным только одному дню. Для получения истории звонков мало только послать Action пакет. Необходимо еще установить переменные канала “date” и “chan”. Они так же устанавливаются через Action пакеты. В первой необходимо передать число, за которое нужна история, а во второй - основу канала (“SIP/[наш номер]”). Переменные устанавливаются для канала, содержащегося в пакете с заголовком “Event: NewCallerid”. После этого необходимо дождаться пакета, начинающегося с “Event: UserEvent” и содержащего наши переменные, которые были нами отправлены ранее. В нем будет история звонков. В одном пакете может быть отражено до 10 звонков. Если количество звонков за день больше, тогда будут высланы дополнительные пакеты. Для каждого звонка указаны номера, с которого и на который совершен звонок, наименование звонящего, время звонка, длительность, отвечен или нет, а так же имя файла на сервере с записью звонка.

Общий алгоритм будет такой:

-  посылается Action пакет с запросом истории звонков;

-       ожидается Event пакет “Event: NewCallerid”. При получении сравнивается номер (CallerIDNum) с номером, переданным в Action пакете, и если они совпадают, тогда запоминается канал и для него устанавливаются переменные канала;

-       ожидается Event пакет “Event: UserEvent”. У него сравниваются канал и дата с запомненными, если совпадают, то начинается построчный разбор истории звонков;

-       каждая строка содержит один звонок, все данные разбираются и упаковываются в более понятный вид;

-       вызывается внешнее событие в 1С, передается строка с данными о звонке;

-       разбирается следующая строка или, если пакет закончился, начинается ожидание следующего пакета.

Схема алгоритма получения истории вызовов приведена на рисунке 1.6.

Рисунок 1.6- Схема алгоритма подпрограммы получения истории вызовов

Серьезным недостатком протокола AMI является его незащищенность. Фактически можно защитить от перехвата только пароль пользователя, остальное же передается открытым текстом и никак не защищено от перехвата. Так как данные могут передаваться по незащищенным каналам связи, необходимо использовать шифрование трафика.

Шифрование - способ преобразования открытой информации в закрытую и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Согласно ГОСТ 28147-89, шифрование подразделяется на процесс зашифровывания и расшифровывания.

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

В зависимости от структуры используемых ключей методы шифрования подразделяются на

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

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

Достоинства симметричного шифрования:

-   скорость (по данным Applied Cryptography - на 3 порядка выше);

-          простота реализации (за счёт более простых операций);

-          меньшая требуемая длина ключа для сопоставимой стойкости;

-          изученность (за счёт большего возраста).

Недостатки:

-   сложность управления ключами в большой сети. Означает квадратичное возрастание числа пар ключей, которые надо генерировать, передавать, хранить и уничтожать в сети. Для сети в 10 абонентов требуется 45 ключей, для 100 уже 4950, для 1000 - 499500 и т. д.;

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

Для компенсации недостатков симметричного шифрования в настоящее время широко применяется комбинированная (гибридная) криптографическая схема, где с помощью асимметричного шифрования передаётся сеансовый ключ, используемый сторонами для обмена данными с помощью симметричного шифрования.

Важным свойством симметричных шифров является невозможность их использования для подтверждения авторства, так как ключ известен каждой стороне.

Несмотря на то, что асимметричное шифрование является более стойким, мы не можем его использовать в силу того, что большинство алгоритмов гораздо более медленные, чем алгоритмы симметричного шифрования.

В настоящее время симметричные шифры - это:

-   блочные шифры. Обрабатывают информацию блоками определённой длины (обычно 64, 128 бит), применяя к блоку ключ в установленном порядке, как правило, несколькими циклами перемешивания и подстановки, называемыми раундами. Результатом повторения раундов является лавинный эффект - нарастающая потеря соответствия битов между блоками открытых и зашифрованных данных;

-          поточные шифры, в которых шифрование проводится над каждым битом либо байтом исходного (открытого) текста с использованием гаммирования. Поточный шифр может быть легко создан на основе блочного (например, ГОСТ 28147-89 в режиме гаммирования), запущенного в специальном режиме.

Большинство симметричных шифров используют сложную комбинацию большого количества подстановок и перестановок. Многие такие шифры исполняются в несколько (иногда до 80) проходов, используя на каждом проходе «ключ прохода». Множество «ключей прохода» для всех проходов называется «расписанием ключей» (key schedule). Как правило, оно создается из ключа выполнением над ним неких операций, в том числе перестановок и подстановок.

Типичным способом построения алгоритмов симметричного шифрования является сеть Фейстеля. Алгоритм строит схему шифрования на основе функции F(D, K), где D - порция данных, размером вдвое меньше блока шифрования, а K - «ключ прохода» для данного прохода. От функции не требуется обратимость - обратная ей функция может быть неизвестна. Достоинства сети Фейстеля - почти полное совпадение дешифровки с шифрованием (единственное отличие - обратный порядок «ключей прохода» в расписании), что сильно облегчает аппаратную реализацию.

Операция перестановки перемешивает биты сообщения по некоему закону. В аппаратных реализациях она тривиально реализуется как перепутывание проводников. Именно операции перестановки дают возможность достижения «эффекта лавины». Операция перестановки линейна - f(a) xor f(b) == f(a xor b)

Операции подстановки выполняются как замена значения некоей части сообщения (часто в 4, 6 или 8 бит) на стандартное, жестко встроенное в алгоритм иное число путем обращения к константному массиву. Операция подстановки привносит в алгоритм нелинейность.

Зачастую стойкость алгоритма, особенно к дифференциальному криптоанализу, зависит от выбора значений в таблицах подстановки (S-блоках). Как минимум считается нежелательным наличие неподвижных элементов S(x) = x, а также отсутствие влияния какого-то бита входного байта на какой-то бит результата - то есть случаи, когда бит результата одинаков для всех пар входных слов, отличающихся только в данном бите.

Существует множество (не менее двух десятков) алгоритмов симметричных шифров, существенными параметрами которых являются:

-   стойкость;

-          длина ключа;

-          число раундов;

-          длина обрабатываемого блока;

-          сложность аппаратной/программной реализации;

-          сложность преобразования.

Распространенные алгоритмы:

-   AES (англ. Advanced Encryption Standard) - американский стандарт шифрования

-          ГОСТ 28147-89 - отечественный стандарт шифрования данных;

-          DES (англ. Data Encryption Standard) - стандарт шифрования данных в США до AES;

-          3DES (Triple-DES, тройной DES);

-          RC6 (Шифр Ривеста );

-          Twofish;

-          IDEA (англ. International Data Encryption Algorithm);

-          SEED - корейский стандарт шифрования данных;

-          Camellia - сертифицированный для использовании в Японии шифр;

-          CAST (по инициалам разработчиков Carlisle Adams и Stafford Tavares);

-          XTEA - наиболее простой в реализации алгоритм.

Отбросив устаревшие и специфичные стандарты, остановимся на двух наиболее подходящих для данного проекта: AES и ГОСТ 28147-89. Encryption Standard (AES), также известный как Rijndael - симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит), принятый в качестве стандарта шифрования правительством США по результатам конкурса AES[6]. Этот алгоритм хорошо проанализирован и сейчас широко используется, как это было с его предшественником DES. Национальный институт стандартов и технологий США (англ. National Institute of Standards and Technology, NIST) опубликовал спецификацию AES 26 ноября 2001 года после пятилетнего периода, в ходе которого были созданы и оценены 15 кандидатур. 26 мая 2002 года AES был объявлен стандартом шифрования. По состоянию на 2009 год AES является одним из самых распространённых алгоритмов симметричного шифрования. Поддержка AES (и только его) введена фирмой Intel в семейство процессоров x86 начиная с Intel Core i7-980X Extreme Edition, а затем на процессорах Sandy Bridge.

ГОСТ 28147-89 - советский и российский стандарт симметричного шифрования, введённый в 1990 году, также является стандартом СНГ. Полное название - «ГОСТ 28147-89 Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования». Блочный шифроалгоритм. При использовании метода шифрования с гаммированием, может выполнять функции поточного шифроалгоритма.

По некоторым сведениям, история этого шифра гораздо более давняя. Алгоритм, положенный впоследствии в основу стандарта, родился, предположительно, в недрах Восьмого Главного управления КГБ СССР (ныне в структуре ФСБ), скорее всего, в одном из подведомственных ему закрытых НИИ, вероятно, ещё в 1970-х годах в рамках проектов создания программных и аппаратных реализаций шифра для различных компьютерных платформ.

С момента опубликования ГОСТа на нём стоял ограничительный гриф «Для служебного пользования», и формально шифр был объявлен «полностью открытым» только в мае 1994 года. История создания шифра и критерии разработчиков по состоянию на 2010 год не опубликованы.

ГОСТ 28147-89 - блочный шифр с 256-битным ключом и 32 циклами преобразования, оперирующий 64-битными блоками. Основа алгоритма шифра - Сеть Фейстеля. Базовым режимом шифрования по ГОСТ 28147-89 является режим простой замены (определены также более сложные режимы гаммирование, гаммирование с обратной связью и режим имитовставки).

В ГОСТе используется 256-битовый ключ и объем ключевого пространства составляет 2256. Ни на одном из существующих в настоящее время или предполагаемых к реализации в недалеком будущем электронном устройстве нельзя подобрать ключ за время, меньшее многих сотен лет. Эта величина стала фактическим стандартом размера ключа для симметричных криптоалгоритмов в наши дни, - так, новый стандарт шифрования США также его поддерживает. Прежний же американский стандарт, DES с его реальным размером ключа в 56 бит и объемом ключевого пространства всего 256 уже не является достаточно стойким в свете возможностей современных вычислительных средств. Это было продемонстрировано в конце 90-х годов несколькими успешными попытками взлома DES переборным путем. Кроме того, DES оказался подвержен специальным способам криптоанализа, таким как дифференциальный и линейный. В этой связи DES может представлять скорее исследовательский или научный, чем практический интерес. В 1998 году его криптографическая слабость была признана официально, - национальный институт стандартов США рекомендовал использовать троекратное шифрование по DES. А в конце 2001 года был официально утвержден новый стандарт шифрования США, AES, построенный на иных принципах и свободный от недостатков своего предшественника.

Общеизвестно, что отечественный стандарт шифрования является представителем целого семейства шифров, построенных на одних и тех же принципах. Самым известным его «родственником» является прежний американский стандарт шифрования, алгоритм DES. Все эти шифры, подобно ГОСТу, содержат алгоритмы трех уровней. В основе всегда лежит некий «основной шаг», на базе которого сходным образом строятся «базовые циклы», и уже на их основе построены практические процедуры шифрования и выработки имитовставки. Таким образом, специфика каждого из шифров этого семейства заключена именно в его основном шаге, точнее даже в его части. Хотя архитектура классических блочных шифров, к которым относится ГОСТ, лежит далеко за пределами темы настоящей статьи, все же стоит сказать несколько слов по ее поводу.

Алгоритмы «основных шагов криптопреобразования» для шифров, подобных ГОСТу, построены идентичным образом, и эта архитектура называется сбалансированная сеть Файстеля (balanced Feistel network) по имени человека, впервые предложившего ее. Схема преобразования данных на одном цикле(раунде) приведена на рисунке 1.7.

Рисунок 1.7 - Содержание основного шага криптопреобразования для блочных шифров, подобных ГОСТу.

На вход основного шага подается блок четного размера, старшая и младшая половины которого обрабатываются отдельно друг от друга. В ходе преобразования младшая половина блока помещается на место старшей, а старшая, скомбинированная с помощью операции побитового «исключающего или» с результатом вычисления некоторой функции, на место младшей. Эта функция, принимающая в качестве аргумента младшую половину блока и элемент ключевой информации (X), является содержательной частью шифра и называется его функцией шифрования. По разным соображениям оказалось выгодно разделить шифруемый блок на две одинаковые по размеру части: |N 1|=|N 2| - именно этот факт отражает слово «сбалансированная» в названии архитектуры. Впрочем, шифрующие несбалансированные сети также используются время от времени, хотя и не так часто, как сбалансированные. Кроме того, соображения стойкости шифра требуют, чтобы размер ключевого элемента не был меньше размера половины блока: в ГОСТе все три размера равны 32 битам.

Если применить сказанное к схеме основного шага алгоритма ГОСТ, станет очевидным, что блоки 1,2,3 алгоритма определяют вычисление его функции шифрования, а блоки 4 и 5 задают формирование выходного блока основного шага исходя из содержимого входного блока и значения функции шифрования.

Сравним DES и ГОСТ по функциональному содержанию и удобству реализации. В циклах шифрования ГОСТа основной шаг повторяется 32 раза, для DES эта величина равна 16. Однако сама функция шифрования ГОСТа существенно проще аналогичной функции DES, в которой присутствует множество нерегулярных битовых перестановок. Эти операции чрезвычайно неэффективно реализуются на современных неспециализированных процессорах. ГОСТ не содержит подобных операций, поэтому он значительно удобней для программной реализации.

Ни одна из реализаций DESа для платформы Intel x86 не достигает даже половины производительности предложенной в настоящей реализации ГОСТа несмотря на вдвое более короткий цикл. Все сказанное выше свидетельствует о том, что разработчики ГОСТа учли как положительные, так и отрицательные стороны DESа, а также более реально оценили текущие и перспективные возможности криптоанализа. Впрочем, брать DES за основу при сравнении быстродействия реализаций шифров уже не актуально. У нового стандарта шифрования США дела с эффективностью обстоят гораздо лучше - при таком же как у ГОСТа размере ключа в 256 бит AES работает быстрее него примерно на 14% - это если сравнивать по числу «элементарных операций». Кроме того, ГОСТ практически не удается распараллелить, а у AES возможностей в этом плане намного больше. На некоторых архитектурах это преимущество AES может быть меньше, на других - больше. Так, на процессоре Intel Pentium оно достигает 28%. Процессоры Intel Core за счет аппаратной поддержки стандарта демонстрируют значительное преимущество в скорости шифрования AES.

Кроме того, в мае 2011 года известный криптоаналитик Николя Куртуа заявил об обнаружении серьезных уязвимостей в ГОСТ. Практический результат пока скромен: 2^64 известных открытых текста и 2^64 памяти для хранения пар “открытый текст/шифртекст” позволяют взломать ГОСТ в 2^8 быстрее, чем простой перебор. Но в плане криптоанализа это делает полностью справедливым утверждение о том, что “ГОСТ взломан”. Так же у ГОСТ есть и другие недостатки. Основные проблемы ГОСТа связаны с неполнотой стандарта в части генерации ключей и таблиц замен. Тривиально доказывается, что у ГОСТа существуют «слабые» ключи и таблицы замен, но в стандарте не описываются критерии выбора и отсева «слабых». Также стандарт не специфицирует алгоритм генерации таблицы замен (S-блоков). С одной стороны, это может являться дополнительной секретной информацией (помимо ключа), а с другой, поднимает ряд проблем:

-   нельзя определить криптостойкость алгоритма, не зная заранее таблицы замен;

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

-          возможность преднамеренного предоставления слабых таблиц замен лицензирующими органами РФ;

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

Исходя из этого, выберем AES для шифрования данных в нашей компоненте.

Схема основного алгоритма программы приведена на рисунке 1.8. Схема алгоритма обработки дополнительных событий от сервера показана на рисунке 1.9.

Рисунок1.8- Схема алгоритма программы

Рисунок1.9- Схема алгоритма проверки дополнительных событий от сервера телефонии

.5 Разработка алгоритма AES

- относительно новый криптографический алгоритм для защиты электронных данных. Точнее, AES - это итеративный блочный шифр с симметричным ключом, который использует 128-, 192- и 256-битные ключи и шифрует/дешифрует данные блоками по 128 битов (16 байтов). В отличие от шифров с открытым ключом, использующих пару ключей, шифры с симметричным ключом применяют для шифрования и дешифрования данных один и тот же ключ [6]. Зашифрованные данные, возвращаемые блочным шифром, содержат ровно столько же битов, сколько и входные данные. При итеративном шифровании выполняется цикл, на каждой итерации которого над входными данными выполняются операции перестановки (пермутации) и замены. Ниже показан пример использования AES: 16-байтный блок данных шифруется 192-битным ключом, а затем дешифруется.

Исходный текст:

11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff

-битный ключ:

01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17

Зашифрованныйтекст:a9 7c a4 86 4e df e0 6e af 70 a0 ec 0d 71 91

Результат расшифровки:

11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff

Предшественником AES является старый стандарт DES (Data Encryption Standard). DES утвердили в качестве федерального стандарта в 1977 г. Он считался пригодным для использования до 1998 г., когда оказалось, что с помощью новейших достижений аппаратно-программного обеспечения и криптографического анализа можно расшифровать сообщение, зашифрованное по алгоритму DES, за 50 часов. С тех пор начались многочисленные успешные атаки на данные, зашифрованные по алгоритму DES. Поэтому в настоящее время DES считается устаревшим, В конце 1999 г. NIST предложил использовать в новом стандарте алгоритм Rijndael (произносится как «rain doll»), разработанный исследователями Джоан Демен (Joan Daemen) и Винсентом Риджменом (Vincent Rijmen), как в наибольшей степени отвечающий критериям безопасности, эффективности реализации, гибкости и простоты. Термины AES и Rijndael иногда употребляются как синонимы, но это разные понятия. Ожидается, что AES станет стандартом де-факто в шифровании всех видов электронных данных, в том числе используемых коммерческими приложениями (например для банковских и финансовых транзакций), в телекоммуникациях, при передаче частной и правительственной информации.

Алгоритм AES основан на перестановках (permutations) и заменах (substitutions). Перестановка - это изменение порядка данных, а замена - замещение одного блока данных другим. В AES используется несколько видов перестановок и замен. Чтобы в них разобраться, рассмотрим конкретный пример - шифрование по алгоритму AES данных, показанное в примере выше.

Здесь шифруется следующее 128-битное значение (во второй строке показаны индексы массива):

11 22 33 44 55 66 77 88 99 аа bb cc dd ее ff

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

и используется 192-битный исходный ключ:

01 02 03 04 05 06 07 08 09 0a 0b 0с 0d 0e 0f 10 11 12 13 14 15 16 17

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

При вызове конструктора AES-класса инициализируются две таблицы, используемые методом шифрования. Первая таблица - матрица замен Sbox размером 16x16. Первые пять строк и столбцов Sbox показаны в таблице1.2.

Таблица 1.2 - Первые пять строк и столбцов матрицы замен Sbox

x\y

0

1

2

3

4

0

63

7c

77

7b

f2

1

ca

82

c9

7d

fa

2

b7

fd

93

26

36

3

04

c7

23

c3

18

4

09

83

2c

1a

1b


Кроме того, в процедуре шифрования по массиву байтов ключа формируется «таблица ключей» («key schedule») w[], показанная в таблице 1.3.

Таблица1.3 - Таблица ключей

0

00

01

02

03

1

04

05

06

07

2

08

09

0a

0b

3

0c

0d

0e

0f

4

10

11

12

13

5

14

15

16

17

6

58

46

f2

f9

7

5c

f4

fe

8

54

48

fe

f5

9

58

47

f9

fa

10

48

56

e2

e9

...

...

...

...

...

49

fa

76

dc

09

50

c4

18

c2

7d

51

e3

a4

1d

5d


Первые Nk (в данном случае Nk = 6) строк w[ ] заполняются значением исходного ключа (от 0x00 до 0x17), а остальные строки генерируются по исходному ключу (seed key). Переменная Nk - это размер исходного ключа в 32-битных словах. В дальнейшем, при описании реализации AES, можно будет увидеть, как именно генерируются элементы w[ ]. Дело в том, что в AES применяется несколько ключей вместо одного. Эти новые ключи называются итеративными (round keys), чтобы подчеркнуть их отличие от исходного ключа, задаваемого при вызове процедуры шифрования.

Сначала подпрограмма шифрования по алгоритму AES копирует 16-байтный входной массив в матрицу State (таблица 1.4) размером 4x4.

Таблица1.4 - Матрица State


0

1

2

3

0

00

44

88

сс

1

11

55

99

dd

2

22

66

aa

ee

3

33

77

bb

ff


Процедура шифрования называется Cipher. Она работает с матрицей State[ ] и описывается псевдокодом, приведенным в распечатке 1.4.Псевдокод - язык описания алгоритмов, использующий ключевые слова языков программирования, но опускающий подробности и специфический синтаксис.

Распечатка 1.4(byte[] input, byte[] output)

{[4,4] State;

Копирование input[] s State[](round = 1; round < Nr-1; ++round)

{

}Rows

Копирование Stated в output[]

}

Алгоритм шифрования выполняет операцию предварительной обработки, которая в спецификации называется AddRoundKey. AddRoundKey выполняет над каждым байтом входной матрицы State операцию XOR с первыми четырьмя строками таблицы ключей. Байту State[r,c] присваивается результат операции XOR с элементом таблицы ключей w[c,r], т. е. State[r,c] = State[r,c] XOR w[c,r].

Например, если первая строка матрицы State содержит байты {00, 44, 88, cc}, а первый столбец таблицы ключей имеет вид {00,04, 08, 0с}, то новым значением State[0,2] будет 0x80 - результат операции XOR над State[0,2] (0x88) и w[2,0] (0x08):

0 0 0 1 0 0 0

0 0 0 1 0 0 0 XOR

0 0 0 0 0 0 0

В основном цикле алгоритма шифрования AES выполняются четыре операции над матрицей State, которые в спецификации называются SubBytes, ShiftRows, MixColumns и AddRoundKey. Операция AddRoundKey - то же, что и предварительная операция AddRoundKey с тем исключением, что при каждом вызове AddRoundKey используются следующие четыре строки таблицы ключей. Подпрограмма SubBytes выполняет операцию замены: замещает каждый байт матрицы State новым байтом, определяемым по таблице Sbox. Например, пусть значением State[0,1] является 0x40 и требуется найти его замену. Берется значение State[0,1] (0x40), и переменной х присваивается его левая цифра (4), а переменной у - правая (0). Затем по индексам х и у из таблицы Sbox берется значение замены.- это операция перестановки, при которой байты матрицы State циклически сдвигаются влево. В таблице 1.5 показано, как ShiftRows обрабатывает State[ ]. Строка 0 матрицы State циклически сдвигается на 0 позиций влево, строка 1 - на одну позицию влево, строка 2 - на две позиции влево, а строка 3 - на три позиции влево.

Таблица1.5 - Обработка State операцией ShiftRows

0123





0

00

44

88

сс

1

11

55

99

dd

2

22

66

aa

ee

3

33

77

bb

ff

- это операция замены, самая сложная для понимания часть алгоритма AES. Она заменяет каждый байт результатом математических операций сложения и умножения в поле (mathematical field additions and multiplications), применяемых к элементам столбца, который содержит этот байт. Я расскажу о сложении и умножении элементов полей в следующем разделе.

Допустим, значением State[0,1] является 0x09, а остальные элементы столбца 1 - 0x60, 0xe1 и 0x04; тогда новым значением State[0,1] будет результат следующего выражения:

+

Здесь сложение и умножение - это специальные математические операции над элементами поля, а не обычное целочисленное сложение и умножение.

Четыре подпрограммы SubBytes, ShiftRows, MixColumns и AddRoundKey вызываются в цикле, выполняемом Nr - 1 раз, где Mr - число итераций для ключа данного размера, Количество итераций алгоритма шифрования равно 10, 12 или 14 в зависимости от размера исходного ключа (128, 192 или 256 бит). В нашем примере Nr равно 12, поэтому четыре операции вызываются 11 раз. По завершении цикла алгоритм шифрования еще раз вызывает SubBytes, ShiftRows и AddRoundKey, а затем копирует матрицу State в выходной параметр.

Подведем итог: ядро алгоритма AES-шифрования образуют четыре операции. AddRoundKey заменяет группы из 4 байтов, комбинируя их с итеративными ключами, которые генерируются по значению исходного ключа. SubBytes замещает отдельные байты в соответствии с таблицей замен. ShiftRows переставляет группы из 4 байтов, циклически сдвигая 4-байтовые строки. MixColumns заменяет байты результатами операций сложения и умножения элементов поля.

Как видно, алгоритм шифрования AES использует достаточно простые операции перестановки и замены, если не считать процедуры MixColumns. В MixColumns применяются специальные операции сложения и умножения. Сложение и умножение в AES основаны на математической теории полей. А конкретнее, в AES используется поле GF(28).

Поле GF(28) состоит из 256 значений от 0x00 до 0xff, над которыми определены операции сложения и умножения. Отсюда (28) в названии. Поле GF (Galois Field) названо в честь Галуа, математика, основавшего теорию полей. Одной из характеристик GF(28) является то, что результат сложения или умножения всегда принадлежит множеству {0x00 … 0xff}. Теория полей достаточно сложна, но применительно к сложению в GF(28) получается простой конечный результат: сложение в GF(28) - это обыкновенная операция XOR.

Однако умножение в GF(28) - более сложная операция. Как в дальнейшем увидим в реализации на С#, в процедурах шифрования и дешифрования алгоритма AES используется умножение только на семь констант:

x01, 0x02, 0x03, 0x09, 0x0b, 0x0d и 0х0е. Поэтому вместо объяснения общей теории умножения в GF(28) ограничимся рассмотрением этих семи частных случаев.

Умножение на 0x01 в GF(28) занимает особое место; оно соответствует умножению на 1 в обычной арифметике и выполняется точно так же: при умножении любого значения на 0x01 получается то же самое значение.

Теперь рассмотрим умножение на 0x02. Как и в случае сложения, теория трудна, зато результат сравнительно прост. Если умножаемое значение меньше 0x80, оно сдвигается влево на 1 бит. Если же умножаемое значение больше или равно 0x80, оно сначала сдвигается влево на 1 бит, а затем к результату сдвига применяется операция XOR со значением 0x1b. Тем самым предотвращается «переполнение поля», и результат умножения остается в допустимом диапазоне.

Освоив операции сложения и умножения на 0x02 в поле GF(28), можем выразить через них умножение на любую константу. При умножении на 0x03 в GF(28) значение 0x03 можно представить как сумму степеней числа 2. Чтобы умножить произвольный байт b на 0x03, представьте 0x03 как 0x02 + 0x01. Следовательно:


Эту операцию можно выполнить, зная, как умножать на 0x02 и 0x01 и как складывать. Аналогично умножение произвольного байта на 0x0d сводится к следующим операциям:


Другие операции умножения, необходимые процедуре MixColumns при шифровании и дешифровании по алгоритму AES, выполняются по тому же универсальному шаблону:


Подведем итог. Сложение в GF(28) - это операция XOR. Умножение в GF(28) сводится к операциям сложения и умножения на 0x02, а умножение на 0x02 - это сдвиг на 1 бит влево, выполняемый в зависимости от условия.

В алгоритме шифрования и дешифрования AES используется таблица ключей, генерируемая по массиву байтов исходного ключа. В спецификации AES это называется процедурой KeyExpansion. Генерация фактически нескольких ключей по начальному ключу обеспечивает лучшее перемешивание битов по сравнению с использованием одного ключа. Нельзя сказать, что разобраться в KeyExpansion так уж трудно, но тем не менее это одна из самых сложных частей алгоритма AES. На высокоуровневом псевдокоде текст процедуры KeyExpansion представлен в распечатке 1.5.

Распечатка 1.5

KeyExpansion(byte[] key, byte[][4] w)

{

Копирование исходного ключа в первые строки w

Для каждой оставшейся строки w

{

Создание новой строки по двум предыдущим

}

Процедура «создание новой строки по двум предыдущим» использует две подпрограммы, Rot Word и Sub Word, а также таблицу констант Rcon (аббревиатура от round constants - итеративные константы). Рассмотрим каждый из этих трех элементов, а потом вернемся к подпрограмме KeyExpansion в целом.

Подпрограмма RotWord не сложна в реализации. Она принимает массив из 4 байтов и циклически сдвигает их на 1 позицию влево. В таблице ключей w[ ]четыре столбца, и RotWord сдвигает заданную строку w[ ] влево. Заметьте: функция RotWord, вызываемая KeyExpansion, очень похожа на подпрограмму ShiftRows, используемую алгоритмом шифрования, с тем исключением, что применяется к одной строке таблицы ключей w[ ], а не ко всей таблице состояния State[ ].

Подпрограмма SubWord выполняет побайтовую замену заданной строки таблицы ключей w[ ] в соответствии с Sbox. Замена в KeyExpansion выполняется так же, как и в алгоритме шифрования. Входной байт, который замещается, разбивается на пару (х,у), задающую индексы в таблице замен Sbox. Например, замена 0x27 дает х = 2 и у = 7, a Sbox[2,7] возвращает 0хсс.

Подпрограмма KeyExpansion использует массив Rcon[ ], называемый таблицей итеративных констант. Каждая из этих констант содержит 4 байта, соответствующие строке таблицы ключей. В AES-подпрограмме KeyExpansion используется 11 итеративных констант, как показано в распечатке 1.6.

Распечатка 1.6void BuildRcon()

{.Rcon = new byte[11,4] { {0x00, 0x00, 0x00, 0x00},

{0x01, 0x00, 0x00, 0x00},

{0x02, 0x00, 0x00, 0x00},

{0x04, 0x00, 0x00, 0x00},

{0x08, 0x00, 0x00, 0x00},

{0x10, 0x00, 0x00, 0x00},

{0x20, 0x00, 0x00, 0x00},

{0x40, 0x00, 0x00, 0x00},

{0x80, 0x00, 0x00, 0x00},

{0x1b, 0x00, 0x00, 0x00},

{0x36, 0x00, 0x00, 0x00} };

} // BuildRcon()

Левыйбайткаждойитеративнойконстанты - этостепеньчисла 2 вполеGF(28). Еще один способ вычисления значений этого байта - умножать каждое предыдущее значение на 0x02 в соответствии с правилами умножения в поле GF(28), приведенным в предыдущем разделе. Заметьте: 0x80 · 0x02 = 0x36, так как 0x80 сдвигается влево на 1, а затем над результатом сдвига выполняется XOR с 0x1b.

Теперь более пристально рассмотрим цикл подпрограммы KeyExpansion. Если детализировать показанный выше псевдокод, этот цикл приобретет следующий вид, показанный в распечатке 1.7.

Распечатка 1.7(row = Nk; row < (4 * Nr+1); ++row)

{= w[row-1](row % Nk == 0)= SubWord(RotWord(temp)) xor Rcon[row/Nk]if (Nk == В and row % Nk == 4)= SubWord(temp)[row] = w[row-Nk] xor temp

}

Если пока отвлечься от операторов if, то видно, что каждая строка таблицы ключей w[ ] - результат XOR предыдущей строки со строкой, находящейся на Nk (4, б или 8 в зависимости от размера ключа) строк выше. Первое условие if означает, что к каждой четвертой, шестой или восьмой строке (в зависимости от размера ключа - 128,192 или 256 битов) применяются подпрограммы SubWord, RotWord, а затем - операция XOR с итеративной константой. Второе условие означает, что в случае 256-битного ключа изменяются строки 12, 20, 28 и так далее через восемь строк. Это делается для того, чтобы в таблице ключей содержались более разнообразные значения.

Посмотрим, как KeyExpansion приступает к обработке ключа, показанного в исходном примере. Исходный ключ - 192-битное значение (6 слов):

01 02 03 04 05 06 07 08 09 0а 0b 0с 0d 0e 0f 10 11 12 13 14 15 16 17

В таблице ключей w[ ] 4 столбца и Nb x (Nr + 1) = 4 х (12 + 1) = 52 строки.

Подпрограмма KeyExpansion копирует значения исходного ключа в первые строки таблицы ключей w[ ], содержащей байты. Поскольку исходный ключ содержит 192 бита (24 байта), а таблица w[ ] всегда содержит 4 столбца, в данном случае KeyExpansion копирует исходный ключ в первые 6 строк w[ ]. Как KeyExpansion заполняет остальные строки таблицы ключей? В данном примере первой вычисляемой строкой является строка 6, поскольку строки от 0 до 5 заполнены значениями исходного ключа:= w[row-1] = 14 15 16 17

Условие (row % Nk == 0) истинно, поэтому к строке применяется подпрограмма RotWord:= 15 16 17 14

Затем применяется подпрограмма SubWord:= 59 47 f0 fa

Далее выполняется XOR с Rcon[row / Nk] - Rcon[6 / 6] = 01 00 00 00:= 58 47 f0 fa

Наконец, выполняется XOR с w[row-Nk] = w[6-6] = 00 01 02 03, и в результате получается строка:[6] = 58 46 f2 f9

Этот процесс повторяется для остальных строк таблицы ключей w[ ].

Подведем итог. В шифровании и дешифровании AES важное место занимает генерация нескольких итеративных ключей по исходному ключу. Алгоритм KeyExpansion генерирует таблицу ключей, используя операции замены и перестановки, во многих отношениях аналогичные операциям, выполняемым алгоритмами шифрования и дешифрования.

Теперь рассмотрим некоторые важные альтернативы той реализации AES, которая была показана здесь, возможные расширения кода и потенциально вероятные попытки взлома AES.

Как и любой алгоритм, AES можно реализовать разными способами. Почему это важно? AES рассчитан на применение в широком спектре систем - от смарт-карт с крохотной памятью до громадных многопроцессорных мэйнфреймов. Во многих случаях критически важна производительность, иногда приходится сталкиваться с ограниченностью памяти или других ресурсов обработки данных. Почти каждую подпрограмму AES можно изменить, оптимизировав производительность за счет памяти, или наоборот. Например, присвоение 256 значений элементам таблицы замен Sbox[ ] выглядит вроде бы достаточно прямолинейно. Но эти значения вычисляются в соответствии с теорией GF(28), и их можно генерировать программно. То же относится к таблице обратных замен и таблице итеративных констант.

Еще одна интересная возможность - разные способы реализации умножения в GF(28), используемого методами Cipher и InvCipher. Была написана базовая функция gfmultby02, умножающая на 0x02, и шесть дополнительных функций, вызывающих ее. Альтернатива - написать универсальную функцию умножения и использовать ее, а не семь разных функций, как в данной реализации. Или экстремальный вариант - составить полную таблицу произведений всех 256 возможных значений байта на 0x01, 0x02, 0x03, 0x09, 0x0b, 0x0d и 0х0е. Еще один способ умножения в GF(28) - реализовать умножение как поиск в двух 256-байтовых массивах, обычно называемых alog[ ] и log[ ], поскольку такое умножение основано на некоторых свойствах GF(28), аналогичных свойствам логарифмов.

Показанный AES-класс вполне подходит для шифрования любых видов .NET-данных, однако его можно расширить. Во-первых, в этой части проекта основное внимание уделялось четкому описанию AES и поэтому пришлось обойти обработку ошибочных ситуаций. По моему опыту, если обеспечить в классе, подобном AES, приемлемый уровень проверки ошибок, объем исходного кода утроится. Так как в AES используется много массивов, нужно часто проверять, не вышел ли индекс за допустимый диапазон. Например, конструктор моего класса даже не проверяет размер параметра, содержащего исходный ключ.

Насколько надежен AES? На этот вопрос сложно ответить, но, по общему мнению, это самый стойкий алгоритм шифрования из существующих. AES уделялось более пристальное внимание, чем другим современным алгоритмам шифрования. С теоретической и практической точек зрения AES считается стойким в том смысле, что единственным эффективном способом его взлома является метод грубой силы - перебор всех возможных ключей. Так как размер ключа - 256 битов, на данный момент лобовая атака не позволит взломать AES за приемлемое время (даже на самых быстрых существующих компьютерах на это уйдут годы).

Наибольшие шансы взломать AES-шифр имеет атака с измерением времени (timing attack), возможная при некачественной реализации AES. Злоумышленник использует различные ключи и замеряет точное время, затрачиваемое на выполнение процедуры шифрования. Если процедура шифрования написана небрежно, время ее выполнения зависит от значения ключа, что позволяет получить информацию о ключе. В AES наиболее подвержена такой атаке подпрограмма MixColumns, так как в ней используется умножение в поле. Защититься от атаки можно двумя способами: вставить пустые инструкции, чтобы при всех умножениях выполнялось одинаковое число инструкций, или реализовать умножение в поле с помощью поиска по таблице, о чем уже упоминалось.

.6 Разработка текста программы

Для реализации представленного в предыдущем разделе алгоритма необходимо разработать текст программы так, чтобы он не только обеспечивал выполнение данного алгоритма, но и был хорошим подспорьем для дальнейшего расширения компонента, внедрения в систему все большего числа функций.

Для начала необходимо, чтобы компонента реализовывала COM-соединение с 1С.

С:Предприятие подключает внешнюю компоненту двумя способами: по указанному ProgID через CreateInstance, либо по имени файла компоненты. В последнем случае 1С пытается выполнить DllRegisterServer для саморегистрации файла через rgs-скрипт, затем ищется строка с ID=100 из ресурсов компоненты, содержащая ProgID объекта. При написании CLR-кода последняя возможность отпадает, поскольку у NET-компонент совсем другой принцип регистрации и другой метод хранения ресурсов. Поэтому из 1С:Предприятия необходимо использовать только метод ПодключитьВнешнююКомпоненту(ProgID), где ProgID должен иметь вид AddIn.xxx, для чего используется атрибут ProgIdAttribute.

Ключевым для работы внешней компоненты является интерфейс IInitDone (Распечатка 1.8).

Распечатка 1.8

[Guid("AB634001-F13D-11d0-A459-004095E1DAEA")]

[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]interface IInitDone

{

// ИнициализациякомпонентаInit(

[MarshalAs(UnmanagedType.IDispatch)]

object connection);

// Вызывается перед уничтожением компонентаDone();

// Возвращается инициализационная информация

voidGetInfo(

[MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_VARIANT)]

ref object[] info);

}

Кроме того, библиотека типов, поставляемая фирмой 1С, содержит ряд других интерфейсов для расширения встроенного языка и других целей, рассматривать которые мы не будем. Конечно можно воспользоваться готовым tlb-файлом и средствами NET создать COM callable wrapper (проще говоря добавить ссылку на COM-библиотеку из проекта), но тогда следует согласится с тем, что множество параметров типа VARIANT будут преобразованы в малоудобные System.Array или Object, в то время как из документации известна их более строгая типизация. Наш интерфейс в NET будет выглядеть, как показано в распечатке 1.9.

Распечатка 1.9IAsyncEvent asyncEvent = null;IStatusLine statusLine = null;void Init(

[MarshalAs(UnmanagedType.IDispatch)]connection)

{= (IAsyncEvent)connection;= (IStatusLine)connection;

}void GetInfo(

[MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_VARIANT)]

ref object[] info)

{[0] = 2000;

}

Интерфейс IAsyncEvent реализован 1С для получения событий от внешнего компонента. Ссылка на него получена путем приведения параметра функции Init интерфейса IInitDone к типу IAsyncEvent при инициализации компонента. Внешнее событие обрабатывается 1С в функции ОбработкаВнешнегоСобытия.

В распечатке 1.10 показан текст реализованного в компонентеинтерфейсаIAsyncEvent.

Распечатка 1.10

[Guid("AB634004-F13D-11D0-A459-004095E1DAEA"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]interface IAsyncEvent

{SetEventBufferDepth(Int32 depth);GetEventBufferDepth(ref Int32 depth);ExternalEvent([MarshalAs(UnmanagedType.BStr)] String source,

[MarshalAs(UnmanagedType.BStr)] String message,

[MarshalAs(UnmanagedType.BStr)] String data);

void CleanBuffer();

}

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

Для начала создадим подключение, как показано в распечатке 1.11.

Распечатка 1.11tcpSocket;Hostname = "sip.miko.ru"; Port = 5038;= new TcpClient(Hostname, Port);

Таким образом мы уже подключились к серверу телефонии. При соединении необходимо указать имя сервера и порт. Далее необходимо авторизоваться на сервере, для этого пошлем по только что установленному соединению Actionпакет, текст которого представлен в распечатке 1.12.

Распечатка 1.12

stringres = "Action: Login" + "\r\n"

+ "ActionID: " + ActionID + "\r\n"

+ "Username: " + Username + "\r\n"

+ "Secret: " + Secret + "\r\n";(tcpSocket, res);

ЗдесьSendString(tcpSocket, res) - функция, котораяпосылаетстрокувпоток. Еекодпредставленвраспечатке 1.13.

Распечатка 1.13(TcpClienttcpSocket, stringStroka) //Послатьстрокувпоток

{= Stroka + "\r\n";[] buf = Encrypt(System.Text.ASCIIEncoding.ASCII.GetBytes(Stroka));.GetStream().Write(buf, 0, buf.Length);

}

Как мы видим, сначала происходит преобразование строки в последовательность байти шифрование, потом строка отправляется в поток.

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

Потоки позволяют программе выполнять параллельную обработку, за счет чего появляется возможность одновременного выполнения нескольких операций [5]. Например, потоки можно использовать для наблюдения ввода данных пользователем, выполнения фоновых задач и обработки одновременных потоков ввода.

Потоки имеют следующие свойства.

-   потоки позволяют программе выполнять параллельную обработку;

-          пространство имен .NET Framework System.Threading упрощает использование потоков;

-          потоки используют одни и те же ресурсы приложения.

По умолчанию программа на языке C# имеет один поток. Однако параллельно основному потоку могут создаваться и использоваться вспомогательные потоки. Эти потоки называются рабочими потоками.

Рабочие потоки могут использоваться для выполнения трудоемких или срочных задач без прерывания основного потока. Например, рабочие потоки часто используются в серверных приложениях для выполнения входящих запросов, не дожидаясь завершения выполнения предыдущего запроса. Рабочие потоки также используются для выполнения "фоновых" задач в настольных приложениях, что позволяет основному потоку (который отвечает за элементы пользовательского интерфейса) оставаться доступным для команд пользователя.

Разделение потоков позволяет решить проблемы с пропускной способностью и быстротой ответа системы, однако при этом возникают проблемы совместного использования ресурсов, в частности взаимоблокировки и состояния гонки. Использование нескольких потоков лучше всего подходит для тех задач, которые используют различные ресурсы, например дескрипторы файлов и сетевые подключения. Назначение нескольких потоков одному ресурсу, вероятнее всего, вызовет проблемы синхронизации и частую блокировку потоков во время ожидания, что сведет к минимуму целесообразность использования нескольких потоков.

В данном случае у нас получается почти полное разграничение обязанностей потоков - основной поток будет служить для соединения с 1С и изредка для передачи команд серверу. Дополнительный поток в свою очередь будет поддерживать соединение с сервером телефонии и слушать поступающие от него события. Здесь слово “изредка” означает много меньшее время использования сети основным потоком. Поэтому и взаимные блокировки потоков будут происходить достаточно редко, чтоб не мешать работе компоненты. На этом закончим с потоками и перейдем к реализации алгоритма AES.

Выше мы рассмотрели все компоненты алгоритма шифрования AES, и теперь реализуем этот алгоритм на С#. ОфициальнаяспецификацияалгоритмаAESсодержитсявдокументеFederalInformationProcessingStandardsPublication 197[6]. Было решено, что реализация должна соответствовать ей максимально точно, но вскоре было обнаружено, что спецификация скорее теоретический документ, чем руководство по реализации. Для удобства было решено использовать те же имена переменных, что и в опубликованном стандарте (даже такие загадочные, как «Nr> и «w»).

В реализации девять полей данных и один перечислимый тип, как показано в распечатке 1.14.

Распечатка 1.14enum KeySize { Bits128, Bits192, Bits256 };int Nb;int Nk;int Nr;byte[] key;byte[,] Sbox;byte[,] iSbox;byte[,] w;byte[,] Rcon;

private byte[,] State;

Поскольку ключи бывают только 128-, 192- и 256-битные, для описания размера ключа очень удобно создать перечислимый тип:

public enum KeySize { Bits128, Bits192, Bits256 };

Как правило, в спецификации в качестве единицы хранения данных используются байты, но имеется два важных поля, задающих размер в 4-байтовых словах. Члены Nb и Nk содержат соответственно размер блока в словах и размер ключа в словах. Nr задает количество циклов. Размер блока - всегда 16 байтов (или 128 битов, т.е. 4 слова в терминологии AES), так что можно было бы объявить его константой. Размеру ключа присваивается значение 4, 6 или 8 в зависимости от значения перечислимого параметра KeySize. Чтобы усложнить зашифрованные данные, алгоритм AES содержит цикл, выполняемый заданное число раз - 10, 12 или 14. Эти значения выбраны в соответствии с теорией криптографического анализа. Количество циклов напрямую зависит от размера ключа.

При проектировании интерфейса класса исходил из обратного - представил, что вызываю конструктор и методы класса из приложения. Применив такой подход,было решено, что экземпляры AES-объектов будут создаваться следующим образом:a = new Аеs(размер ключа, исходный ключ)

Подпрограммы шифрования и дешифрования вызываются, как показано в распечатке 1.15.

Распечатка 1.15

а.Cipher(plainText, cipherText);.InvCipher(cipherText, decipheredText);

Быливыбраныслегканеуклюжиеименаметодов Cipher и InvCipher, посколькуонииспользуютсявспецификации AES. Код конструктора AES-класса представлен в распечатке 1.16.

Распечатка 1.16

publicAes(KeySizekeySize, byte[] keyBytes)

{(keySize);.key = new byte[this.Nk * 4];.CopyTo(this.key, 0);();

BuildlnvSbox();();();

}

Сначала конструктор присваивает значения полям Nb, Nk и Nr, вызывая вспомогательный метод SetNbNkNr, приведенный в распечатке 1.17.

Распечатка 1.17void SetNbNkNr(KeySize keySize)

{.Nb = 4; // block size always = 4 words = 16 bytes = 128 bits for AES(keySize == KeySize.Bits128)

{.Nk = 4; // key size = 4 words = 16 bytes = 128 bits.Nr = 10; // rounds for algorithm = 10

}if (keySize == KeySize.Bits192)

{.Nk = 6; // 6 words = 24 bytes = 192 bits.Nr = 12;

}if (keySize == KeySize.Bits256)

{.Nk = 8; // 8 words = 32 bytes = 256 bits.Nr = 14;

}

} // SetNbNkNr()

Затем байты, передаваемые конструктору, копируются в поле класса. Ключ объявлен как поле класса и инициализируется операторами (распечатка 1.18).

Распечатка 1.18

this.key = new byte[this.Nk * 4];

keyBytes.CopyTo(this.key, 0);

Для инициализации таблиц замен Sbox[ ] и iSbox[ ] было решено вызывать в конструкторе закрытые вспомогательные методы BuildSbox и Buildlnv-Sbox. Таблицы Sbox[ ] и iSbox[ ] необходимы подпрограмме расширения ключа и методам Cipher и InvCipher соответственно, поэтому можно было бы поместить инициализацию Sbox[| и вызов метода Key Expansion в методы Cipher и InvCipher. Но код, который выполняет эти операции в конструкторе, выглядит понятнее. Как заполняется sBox[ ], показано на распечатке 1.19. Таблица iSbox[ ] заполняется аналогично. Для удобства чтения код структурирован.

Распечатка 1.19

privatevoidBuildSbox()

{

this.Sbox = newbyte[16,16] { // populatetheSboxmatrix

/* 0 1 2 3 4 5 6 7 8 9 abcdef */

/*0*/ {0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76},

/*1*/ {0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0},

/*2*/ {0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15},

/*3*/ {0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75},

/*4*/ {0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84},

/*5*/ {0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf},

/*6*/ {0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8},

/*7*/ {0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2},

/*8*/ {0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73},

/*9*/ {0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb},

/*a*/ {0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79},

/*b*/ {0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08},

/*c*/ {0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a},

/*d*/ {0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e},

/*e*/ {0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf},

/*f*/ {0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16} };

} // BuildSbox()

Лучше всего объявить таблицу ключей w[ ], таблицу итеративных констант Rcon[ ] и таблицу State[ ] членами класса и присваивать значения таблицам Rcon[ ] и w[ ] закрытыми вспомогательными методами.

Вспомним, что левый байт каждой строки Rcon[ ] - это степень 2 в поле GF(28), следовательно, эту таблицу можно заполнить, выполнив вычисления вида:= prevVal * 0x02;

В конце конструктора AES-класса вызывается метод KeyExpansion, формирующий таблицу ключей w[ ]. Код метода довольно прост. В спецификации используется гипотетический тип данных - 4-байтное слово. В С# такого типа нет, поэтому он был смоделирован как массив из 4 байтов. Сначала таблице w[ ]выделяется память оператором new. Затем первые Nk (4, 6 или 8) строк w[ ] заполняются значениями массива key[ ], передаваемого конструктору (распечатка 1.20).

Распечатка 1.20.w[row,0] = this.key[4*row];.w[row,1] = this.key[4*row+1];.w[row,2] = this.key[4*row+2];.w[row,3] = this.key[4*row+3];void KeyExpansion()

{.w = new byte[Nb * (Nr+1), 4]; // 4 columns of bytes corresponds to a word(int row = 0; row < Nk; ++row)

{.w[row,0] = this.key[4*row];.w[row,1] = this.key[4*row+1];.w[row,2] = this.key[4*row+2];.w[row,3] = this.key[4*row+3];

}[] temp = new byte[4];(int row = Nk; row < Nb * (Nr+1); ++row)

{[0] = this.w[row-1,0]; temp[1] = this.w[row-1,1];[2] = this.w[row-1,2]; temp[3] = this.w[row-1,3];(row % Nk == 0)

{= SubWord(RotWord(temp));[0] = (byte)( (int)temp[0] ^ (int)this.Rcon[row/Nk,0] );[1] = (byte)( (int)temp[1] ^ (int)this.Rcon[row/Nk,1] );[2] = (byte)( (int)temp[2] ^ (int)this.Rcon[row/Nk,2] );[3] = (byte)( (int)temp[3] ^ (int)this.Rcon[row/Nk,3] );

}if ( Nk > 6 && (row % Nk == 4) )

{= SubWord(temp);

}

// w[row] = w[row-Nk] xor temp.w[row,0] = (byte) ( (int)this.w[row-Nk,0] ^ (int)temp[0] );.w[row,1] = (byte) ( (int)this.w[row-Nk,1] ^ (int)temp[1] );.w[row,2] = (byte) ( (int)this.w[row-Nk,2] ^ (int)temp[2] );.w[row,3] = (byte) ( (int)this.w[row-Nk,3] ^ (int)temp[3] );

} // for loop

} // KeyExpansion()

В этом коде часто встречается операция XOR над парами байтов. Так как в языке С# не определен оператор А (XOR) для типа byte, приходится приводить byte к int, а результат - обратно к byte. Например, приходится использовать:

temp[0] = (byte)( (int)temp[0] ^ (int)this.Rcon[row/Nk,0] );

вместо:[0] = temp[0] ^ this.Rcon[row/Nk,0];

При выполнении условия метод KeyExpansion вызывает закрытые методы SubWord и RotWord. Выбор имен методов объясняется тем, что такие имена используются в спецификации. И в этом случае, поскольку в С# нет типа word, он моделируется массивом из четырех байтов. Код методов SubWord и RotWord весьма прост.

Более сложной операцией является поиск значения замены в процедуре SubWord. Вспомним, чтобы найти замену, входной байт разбивается на левые 4 бита и правые 4 бита. То есть индекс х получается сдвигом байта на 4 бита вправо оператором >>, а индекс у - выполнением логического оператора AND со значением 00001111. Если записать код в менее лаконичном, но более удобном для чтения виде, чем в примере, он будет выглядеть, как показано в распечатке 1.21.

Распечатка 1.21х = word[0] >> 4;у = word[0] & 0x0f;substitute = this.Sbox[x,y];

result[0] = substitute;

Но был использован код, представленный в распечатке 1.22.

Распечатка 1.22[0] = this.Sbox[word[0] >> 4, word[0] & 0x0f ];

Итак, конструктор AES-класса принимает размер ключа (128, 192 или 256 бит) и массив байтов, содержащий исходный ключ. Затем присваивает значения размеру входного блока, размеру исходного ключа и количеству итераций алгоритма шифрования, а потом копирует исходный ключ в поле key. Кроме того, конструктор формирует четыре таблицы: две таблицы замен, используемые методами шифрования и дешифрования, таблицу итеративных констант и таблицу ключей, содержащую итеративные ключи.

Код метода Cipher показан на распечатке 1.23. Он очень прост, поскольку за него работают закрытые методы AddRoundKey, SubBytes, ShiftRows и MixColumns.

Распечатка1.23void Cipher(byte[] input, byte[] output}

{

// state = input.State = new byte[4, Nb];(int i = 0; 1 < (4 * Nb); ++1)

{.State[i % 4, i/43] = input[i];

}(0);(int round = 1; round <= (Nr - 1); ++round)

{();();() ;(round) ;

}();();(Nr);

// output = state(int i=0; i < (4 * Nb); ++i)

{[i] = this.State[i % 4, i / 4];

}

} // Cipher()

Сначала метод Cipher копирует входной массив текста в матрицу состояния State[ ]. Далее метод Cipher первый раз вызывает метод AddRoundKey, после чего выполняет цикл, количество итераций которого на 1 меньше общего числа итераций. Потом выполняется еще одна итерация, на которой, согласно спецификации, не вызывается метод MixColumns.

Методу AddRoundKey нужен номер выполняемой итерации, чтобы определить, какие четыре строки таблицы ключей w[ ] следует использовать. Заметим, что к State[r,c] применяется операция XOR с w[c,r], а не с w[r,c]. Метод SubBytes извлекает индексы из входного байта с помощью сдвига вправо на 4 бита и операции AND с 0x0f, т. е. так же, как и метод KeyExpansion. Код закрытого метода AddRoundKey показан в распечатке 1.24.

Распечатка1.24

privatevoidAddRoundKey(intround)

{(int r = 0; r < 4; ++r)

{(int с = 0; с< 4; ++с)

{.State[r,c] * (byte) С (int)this.State[r,c] * (int)w[(round*4)+c,r]>;

}

}

} // AddRoundKey()void SubBytes()

{(int r = 0; r < 4; ++r)

{(int с = 0; с< 4; ++c)

{. State[r,c] = this,Sbox[ (tnis.State[r,c] >> 4), (this.State[r,c] & 0x0f) ];

}

}

}// SubBytes(который правильнее было бы назвать RotateRows) циклически сдвигает row[0] на 0 позиций влево, row[1] - на 1 позицию влево и т. д. Код метода ShiftRows показан в распечатке 1.25.

Распечатка 1.25void ShiftRows()

{[,] temp = new byte[4,4];(int f = 0; f < 4; ++f)

{(int с = 0; с< 4; ++c)

{[r,c] = this.State[r,c];

}

}(int r = 1; r < 4; ++r)

{(int с = 0; с< 4; ++c)

{.State[r,c] = temp[ r, (c + r) % Nb ];

}

}

}// ShiftRows()[ ] копируется в матрицу temp[ ], а затем, чтобы выполнить сдвиг, в цикле вызывается оператор:

this.State[r, (с + r) % Nb ] = temp[r,c];

Распечатка 1.26[0,c] = 0x02 * State[0,c] + 0x03 * State[1,c] + 0x01 * State[2,c] + 0x01 * State[3,c][1,c] = 0x01 * State[0,c] + 0x02 * State[1,c] + 0x03 * State[2,c] + 0x01 * State[3,c][2,c] = 0x01 * State[0,c] + 0x01 * State[1,c] + 0x02 * State[2,c] + 0x03 * State[3,c][3,c] = 0x03 * State[0,c] + 0x01 * State[1,c] + 0x01 * State[2,c] + 0x02 * State[3,c]

Эти выражения довольно громоздки, поэтому было решено написать закрытые вспомогательные функции, вычисляющие произведения на 0x01, 0x02 и 0x03 в поле GF(28). Вспомогательные функции очень короткие. Например, код, умножающий в поле байт b на 0x03, показан в распечатке 1.27.

Распечатка 1.27(byte) ( (int)gfmultby02(b) ” (int)b );void MixColusms()

{[,] temp * new byte[4,4];(int r = 0; r < 4; ++r)

{(int с = 0; с< 4; ++с)

{[r,c] = this.State[r, c];

}

}(int c = 0 ; с< 4; ++c)

{.State[0,c] = (byte) ( (int)gfmultby02(temp[0,c]) * (int)gfmultby03(temp[1,c]) * (int)gfmultby01(temp[2,c]) * (int)gfmultby01(temp[3,c]) );.State[1,c] = (byte) ( (int)gfmultby01(temp[0,c]) * (int)gfmultby02(temp[1,c]) * (int)gfmultby03(temp[2,c]) * (int)gfmultby01(temp[3,c]) );.State[2,c] = (byte) ( (int)gfmultby01(temp[0,c]) * (int)gfmultby01(temp[1,c]) * (int)gfmultby02(temp[2,c]) * (int)gfmultby03(temp[3,c]) );.State[3,c] = (byte) ( (int)gfmultby03(temp[0,c]) * (int)gfmultby01(temp[1,c]) * (int)gfmultby01(temp[2,c]) * (int)gfmultby02(temp[3,c]) );

}

}// MixColumns

Как уже было сказано, любое умножение в поле GF(28) можно свести к умножению на константу 0x02 и сложению. Я назвал метод, умножающий на 0x02, gfmultby02, отступив от принципа использовать те же имена методов, что и в спецификации, где эта подпрограмма называлась xtime.

Метод Cipher выполняет цикл, где к входным данным применяются четыре операции. В результате формируются зашифрованные выходные данные. AddRoundKey заменяет байты, используя несколько итеративных ключей, получаемых из исходного ключа. SubBytes заменяет байты в соответствии со значениями в таблице замен. ShiftRows переставляет байты, сдвигая строки матрицы, a MixColumns заменяет байты, применяя операции сложения и умножения в поле к элементам столбцов.

Раздел 2. Технологический

2.1 Интеграция в режиме «Конфигуратор»

Встраивание программного комплекса автоматизации телефонных соединений производится в 2 этапа:

-  встраивание в типовую конфигурацию 1С. Производится в режиме запуска «Конфигуратор»;

-       настройка параметров панели в режиме «Предприятие».

В данном примере встраивания взята конфигурация УТ версии 10.3.14.5. В остальные версии встраивание аналогично. Данная инструкция применима ТОЛЬКО к типовым конфигурациям. Если конфигурация измененная, то данная инструкция не рекомендуется.

Прежде чем модифицировать конфигурацию необходимо сделать резервную копию базы: Зайдите в 1С в режиме «Конфигуратор», далее главное меню «Администрирование» - «Выгрузить информационную базу» (пользователь должен обладать полными правами). Далее проверьте, открыта ли конфигурация: главное меню «Конфигурация» - «Открыть конфигурацию». Сделайте резервную копию конфигурации поддержки: главное меню «Конфигурация» - «Поддержка» - «Настройка поддержки» (рисунок 2.1).

Рисунок 2.1 - Открытие окна «Настройка поддержки»

В появившемся окне введите имя файла и его расположение, после чего сохраните его (на рисунке 2.2 кнопка отмечена цифрой 1).

Рисунок 2.2 - Окно «Настройка поддержки»

Далее включите возможность редактирования конфигурации (на рисунке 2.2 кнопка отмечена цифрой 2). Установите правило поддержки (рисунок 2.3).

Рисунок 2.3 - Установка правил поддержки

Нажмите «ОК» Обновите конфигурацию базы данных (рисунок 2.4).

Рисунок 2.4 - Обновление конфигурации БД

Теперь необходимо встроить в конфигурацию софтфон.Для этого откройте главное меню «Конфигурация» - «Поддержка» - «Обновить конфигурацию» (рисунок 2.5).

Рисунок 2.5 - Окно обновления конфигурации 1С

Выберите вариант обновления «Из файла». В диалоговом окне выберите файл из поставки (*.cfu). Нажмите «Готово». Далее со всем соглашаетесь. Спустя пару минут появится окно сравнения и объединения конфигураций, показанное на рисунке 2.6.

Рисунок 2.6 - Окно сравнения конфигураций 1С

Выберите пункт «Выполнить». В появившемся окне нажмите «ОК».

Обновите конфигурацию базы данных.

На этом этапе все необходимые изменения уже внесены. Осталось вернуть конфигурацию на оригинальную поддержку, для этого сначала снимите конфигурацию с поддержки: Откройте окно настройки поддержки (главное меню «Конфигурация» - «Поддержка» - «Настройка поддержки»). Выберите пункт «Снять с поддержки». В появившемся окне выберите «ДА». Закройте форму настройки поддержки. Обновите конфигурацию базы данных, как показано на рисунке 2.7.

Рисунок 2.7 - Обновление конфигурации БД

Теперь поставьте конфигурацию на поддержку: главное меню «Конфигурация» - «Сравнить / объединить с конфигурацией из файла» выберите файл конфигурации поддержки, сохраненный в пункте 3. На вопрос «Поставить на поддержку?» ответьте «Да» (рисунок 2.8).

Рисунок 2.8 - Диалог постановки на поддержку

В окне сравнения и объединения снимите все галки (будет обновлена только конфигурация поддержки) как показано на рисунке 2.9.

Рисунок 2.9 - Окно сравнения измененной конфигурации с типовой

Нажмите «Выполнить». В появившемся окне установки правил поддержки оставьте все по умолчанию. Обновите конфигурацию базы данных.

Часть объектов в результате этих операций оказалась снятой с поддержки. Необходимо вручную настроить правила поддержки: главное меню «Конфигурация» - «Поддержка» - «Настройка поддержки». Правой кнопкой мыши щелкните по корню конфигурации, как показано на рисунке 2.10.

Рисунок 2.10 - Настройка поддержки

Установите правило поддержки для элементов (рисунок 2.11).

Рисунок 2.11 - Настройка правил поддержки

Установите данное правило для следующих объектов:

-  Корень конфигурации;

-       ОбщийМодуль.УправлениеКонтактнойИнформацией;

-       ОбщиеФормы.НастройкаПараметровУчета;

-       Справочник.ВидыКонтактнойИнформации (корень);

-       Справочник.КонтактныеЛица (корень);

-       Справочник.КонтактныеЛица.ФормаЭлемента;

-       Справочник.КонактныеЛицаКонтрагентов (корень);

-       Справочник.КонактныеЛицаКонтрагентов.ФормаЭлемента;

-       Справочник.Пользователи (корень);

-       Справочник.Пользователи.ФормаЭлемента;

-       Справочник.Контрагенты (корень);

-       Справочник.Контрагенты.ФормаЭлемента;

-       Справочник.Организации (корень);

-       Справочник.Организации.ФормаЭлемента;

-       Документ.Событие (корень);

-       Документ.Событие.ФормаДокумента;

-       Обработка.РедактированиеДанныхНезарегистрированныхКонтрагентов (корень);

-       Обработка.РедактированиеДанныхНезарегистрированныхКонтрагентов.

Форма;

-  Обработка.РедактирвоаниеКонтактнойИнформации (корень);

-       Обработка.РедактирвоаниеКонтактнойИнформации.Форма;

-       ПланВидовХарактеристик.НастрйокиПользователей (корень);

-       РегистрыСведений.ДанныеНезарегистрированныхКонтрагентов (корень);

-       РегистрыСведений.КонтактнаяИнформация (корень).

Обновите конфигурацию базы данных (рисунок 2.12).

Рисунок 2.12 - Обновление конфигурации

На этом встраивание в режиме «Конфигуратор» закончено.

.2 Интеграция в режиме «Предприятие»

После того, как было произведено встраивание «Панель телефонии Asterisk для 1С» в режиме 1С:Конфигуратор, необходимо завершить внедрение в режиме 1С:Предприятие. Для этого совершим несколько простых действий, которые разделим на этапы.

Этап 1. Настройка Панели телефонии Asterisk в Константах.Откройте 1С в режиме Предприятие. Зайдите в меню «Сервис» → «Настройки учета» → «Настройки параметров учета», находите гиперссылку «Настроить панель телефонии Asterisk», как показано на рисунке 2.13.

Рисунок 2.13 - Доступ к настройкам панели телефонии

Будет открыта форма настройки констант (рисунок 2.14).

Рисунок 2.14 - Настройки панели телефонии

Необходимо выбрать используемый в системе софтфон как на картинке. Кроме того, тут можно настроить коды выходов.

Этап 2. Настройка Панели телефонии для абонентов. Для корректного отображения иконок в Панели телефонии необходимо создать новое свойство «Пол» для справочника «Физические лица». Заходите в меню Предприятие → Свойства объектов. Выберите в левой колонке справочник «Физические лица» и создайте новое свойство, как показано на рисунке 2.15.

Рисунок 2.15 - Создание нового свойства

В наименовании укажите название свойства «Пол», а на закладке «Значение свойства» по кнопке «Добавить» создайте 2 значения свойства: «Мужской» и «Женский» (рисунок 2.16).

Рисунок 2.16 - Заполнение значений свойства

Работа со справочником "Физические лица". Для каждого пользователя телефонии в справочнике «Физические лица» (Предприятие → Сведения о предприятии → Физические лица) на вкладке «Свойство» указываем значение свойства «Пол» (рисунок 2.17).

Рисунок 2.17- Установка свойства для пользователей

Работа со справочником "Пользователи".Для каждого пользователя в настройках необходимо указать физическое лицо, которым является данный пользователь, а так же указать использование СофтФона Лайт. Выберите в меню Сервис → Настройки пользователя физлицо из справочника «Физические лица» по кнопке, указанной на рисунке 2.18.

Рисунок 2.18 - Привязка физического лица к пользователю

Далее каждому пользователю, который будет пользоваться функционалом телефонии необходимо задать внутренний номер абонента на вкладке «Адреса и Телефоны». По кнопке «Добавить» добавьте свойство с видом «Внутренний номер» и назначьте внутренний номер пользователя, как показано на рисунке 2.19.

Рисунок 2.19 - Добавление внутреннего номера сотрудника

Далее необходимо указать использование Панели телефонии Asterisk. Для этого в дереве настроек выбираем последовательно: Панель телефонии Asterisk. Общие настройки. Поставьте галочку «Использовать Панель телефонии Asterisk» (рисунок 2.20).

Рисунок 2.20 - Включение панели телефонии

Этап 3. Настройки параметров связи с сервером Asterisk в Панели телефонии.Для настройки параметров Asterisk зайдите в настройки Панели телефонии, как показано на рисунке 2.21.

Рисунок 2.21 - Настройки подключения к серверу

В строке SIP канал укажите внутренний номер абонента через »/», во второй строке - мобильный телефон для отбора истории звонков, которые пришли на сотовый.

Далее укажите:

-  хост - адрес сервера астериск с опубликованным AMI интерфейсом;

-       порт - порт опубликованного AMI интерфейса;

-       логин и пароль - соответственно логин и пароль на сервере Астериск;

-       контекст - по умолчанию для исходящих вызовов из настроек Астериска;

-       открывать событие при звонке - соответственно открывать или не открывать документ «Событие»;

-       использовать автоподъём при наборе - по умолчанию для телефонов марки Linksys SPA(возможна настройка для любого IP-телефона);

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

-       выводить отладочные сообщения - для тестирования работы и улавливания ошибок.

Кнопка Переподключиться используется для перелогинивания на сервере Asterisk без перезапуска программ 1С:Предприятие, а кнопка Пинг сервера - для проверки связи с сервером.

.3 Инструкция пользователю

Панель телефонии Asterisk состоит из 3 основных блоков:

-  строка “Умного поиска”;

-       блок “Активные линии связи”;

-       блок “Список сотрудников”.

Строка «Умный поиск» служит для быстрого поиска контактной информации и набора телефонного номера. По наименованию полному или частичному можно найти все возможные контакты контрагента или контактного лица. Например, если ввести “ЭЛМА”, то «Панель телефонии Asterisk для 1С:CRM 8» выдаст список номеров контрагентов, контактных лиц, пользователей, в наименовании которых встречается данное слово (рисунок 2.22).

Рисунок 2.22 - Строка «Умный поиск»

Если в строку «Умного поиска» ввести номер телефона, то «Панель телефонии Asterisk» сразу же совершит набор данного номера. При поступлении входящего звонка по телефонному номеру клиента, происходит идентификация клиента в базе 1С. В панели телефонии в блоке «Активные линии связи» появляется информация о клиенте, ранее зарегистрированном в базе 1С:

-  номер телефона звонящего;

-       наименование контрагента;

-       наименование контактного лица контрагента.

В случае, если звонок произошел с номера телефона контрагента, а не контактного лица, в поле контактного лица высвечивается контактное лицо, отмеченное как основное.

Предусмотрена возможность управлять звонком через «Панель телефонии Asterisk» с помощь специальных иконок:

-  ответить на вызов;

-       перевести звонок на другого сотрудника;

-       удерживать звонок;

-       сбросить вызов;

-       отправить факс клиенту;

-       включить/отключить запись текущего разговора;

-       открыть карточку контрагента.

Существуют 3 разновидности входящего звонка:

-  звонок зарегистрированного контрагента;

-       звонок с нового номера зарегистрированного контрагента;

-       звонок незарегистрированного контрагента.

При ответе оператором на звонок автоматически открывается окно документа «Событие» (если данная функция отмечена галочкой в настройках Панели телефонии) с первоначально заполненными полями информацией о клиенте, если данный клиент зарегистрирован в базе. Оператор может ввести добавочную информацию о звонке: поля «Тема» и «Содержания» и др. Зарегистрированную информацию о звонке можно передать другом сотруднику при переводе звонка во время разговора, а если сотрудник отсутствует, то можно оставить напоминание со ссылкой на зарегистрированный звонок.

Если же клиент совершает вызов с нового номера телефона, то при помощи необходимо зарегистрировать данный номер на известного контрагента или контактное лицо. Если же клиент не был ранее зарегистрирован в базе, то в документ Событие в поле Контрагент подставится “Незарегистрированный контрагент” с номером телефона. При необходимости можно зарегистрировать нового контрагента, при этом автоматически номер телефона подставится в поле номера телефона контрагента при регистрации. Для событий, созданных во время звонка или из истории звонков, становится активна кнопка, при нажатии которой можно прослушать звонок, зарегистрированный данным Событием.

Программа «Панель телефонии Asterisk» обрабатывает и внутренние звонки между сотрудниками. В «Панель телефонии Asterisk» помещается информация о сотруднике и его внутреннем номере. В этом списке подсвечиваются желтым цветом сотрудники, которые в данный момент разговаривают по телефону, серым - сотрудники, чьи телефоны сейчас выключены.

При двойном клике на сотрудника Панель телефонии совершает вызов данному сотруднику. При двойном клике на сотрудника во время разговора с клиентом происходит консультативный перевод клиента на вызванного сотрудника. Если кликнуть на коллегу во время вызова еще до поднятия трубки, произойдет бесконсультативный перевод звонка.

В нескольких диалоговых окнах программы 1С можно автоматически набирать телефонные номера контрагентов и контактных лиц. Например, эту возможность предоставляют следующие диалоговые окна:

-  карточка контрагента;

-       карточка контактного лица;

-       карточка организации;

-       карточка физического лица;

-       карточка пользователя;

-       документ «Событие».

Для этого достаточно выделить нужный телефон и нажать специальную кнопку - «Выполнить стандартное действие» в карточке контрагента.

Вкладка «История звонков» и обработка пропущенных звонков. На вкладке «История звонков» можно посмотреть список всех вызовов за определенную дату, которая задается по иконке.

По кнопке - совершить вызов выделенного контрагента, например, не дозвонившегося клиента. Кнопка используется для прослушивания разговора, который можно скачать, нажав на соответствующую пиктограмму.

Особенно полезна информация о пропущенных звонках. Для получения списка пропущенных вызовов можно воспользоваться фильтром «Пропущенные» для показа только пропущенных вызовов, которые будут отображаться красным цветом.

При двойном клике по записи в журнале открывается документ «Событие», которое зарегистрировало данное обращение или создается новый документ с заполненными реквизитами звонка. Выделив нужную запись о звонке, можно воспользоваться контекстным меню, которое реализует функции, представленные на рисунке 2.23.

Рисунок 2.23 - Контекстное меню истории

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

При двойном клике по записи, открывается документ событие, которое регистрирует данный факс. При вызове контекстного меню на выбранной записи, можно создать (открыть) документ событие или просмотреть в браузере файл факса.

При ситуации, когда необходимо разделять клиентов по основным менеджерам, которые чаще всего работают с данными клиентами. Например, для повышения качества работы, увеличения скорости обработки звонков или разгрузки секретарей. Для запуска данной функции необходимо в режиме 1С:Предприятие открыть настройки «Панели телефонии Asterisk» по кнопке и поставить галочку на использование для всех менеджеров, у которых предполагается такая схема работы. Кроме того необходимо в карточке контрагента назначить работающего с ним менеджера основным.

Далее в карточке Контрагента внизу напротив Менеджеры: должен отобразиться основной менеджер. Функция “Перехватывать звонки своих клиентов” готова к работе.

Раздел 3. Организационно-экономический

.1 Построение сетевого графика

В последние десятилетия исключительно усложнились управление и организация различных технических и научных разработок. Большие масштабы разработок усложнили координацию работ исполнителей и оценку хода выполнения работ. Одним из важнейших факторов стало максимальное сокращение сроков разработок с целью недопущения морального старения разрабатываемой системы.

Наиболее удобным в этих условиях являются системы сетевого планирования и управления (СПУ), основанные на применении сетевых моделей планируемых процессов, допускающих использование современной вычислительной техники и позволяющих быстро определить последствия различных вариантов управляющих воздействий и находить наилучшие из них.

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

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

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

Сетевое планирование основываются на разработанных практически одновременно и независимо методе критического пути МКП (СРМ - Critical Path Method) и методе оценки и пересмотра планов ПЕРТ (PERT - Program Evaluation and Review Technique). В данном дипломном проекте используется метод критического пути.

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

-   составляется перечень событий и работ;

-          устанавливается топология сети;

-          строится сетевой график по теме;

-          определяется продолжительность работ ();

-          рассчитываются параметры сетевого графика;

-          определяется продолжительность критического пути;

-          проводится анализ и оптимизация сетевого графика, если это необходимо.

В перечне событий и работ указывают кодовые номера событий и их наименование в последовательности от исходного события к завершающему, при расположении кодовых номеров и наименований работ перечисляются все работы, имеющие общее начальное [8].

Исходные данные для расчета получают методом экспертных оценок.

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

- минимальную;

-максимальную;

-наиболее вероятную или только две первые.

Эти величины являются исходными для расчета ожидаемого времени:

(3.1)

Перечень событий и работ, а также результаты расчета по формуле (3.1) приведены в таблице 3.1.

Таблица 3.1 - Перечень работ

Наименование работы

Код работы

Продолжительность, дней




0

Анализ возможности разработки программного комплекса

0-1

1

2

1

1

Составление технических требований, выбор инструментов разработки

1-2

1

2

1

2

Разработка тестовой библиотеки, подключение к 1С

2-3

2

4

3

3

Разработка подпрограммы подключения к Asterisk

3-4

2

3

2

4

Тестирование передачи событий из Asterisk в 1С и обратно

4-5

2

3

2

5

Решение проблем с выходом из программы

5-6

1

2

1

6

Написание шаблонов управляющих команд сервера телефонии

6-7

3

5

4

7

Разработка графического интерфейса пользователя

7-8

2

5

3

8

Обработка события входящего телефонного вызова

8-9

1

3

2

9

Обработка события исходящего телефонного вызова

9-10

1

3

2

10

Добавление второй активной телефонной линии

10-11

2

4

3

11

Разработка подпрограммы получения истории вызовов

11-12

1

5

3

12

Добавление возможности обработки сообщений об ошибках

12-13

1

2

1

13

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

11-12

2

4

3

14

Формирование руководства пользователя и технической документации

11-13

5

8

6

15

Дополнение технической документации

12-13

1

2

1

16

Сертификация программного комплекса на совместимость с 1С

13-14

2

5

3


После построения графика и сбора необходимых исходных данных рассчитывают параметры сети: сроки совершения событий, резервы времени, продолжительность критического пути. Для описания сети в "терминах событий" используются следующие понятия:

-       ранний срок наступления событий () - минимальный срок, необходимый для выполнения всех работ, предшествующих данному событию, равен продолжительности наибольшего из путей, ведущих от исходного события 1 к данному.

(3.2)

-       максимальный путь от исходного события 1 до завершающего называется критическим путем сети ();

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

(3.3)

Все события в сети, не принадлежащие критическому пути, имеют резерв времени (), показывающий на какой предельный срок можно задержать наступление этого события, не увеличивая общего срока окончания работ (т.е. продолжительности критического пути).

(3.4).

При описании сети в "терминах работ" определяют:

-  ранние и поздние сроки начала и окончания работi,j:

-       ранний срок начала:

(3.5)

-  поздний срок начала:

(3.6)

-  ранний срок окончания:

(3.7)

-  поздний срок окончания:

(3.8)

Работы сетевой модели могут иметь два вида резервов времени: полный () и свободный ().

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

(3.9)

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

(3.10)

Результаты расчета параметров сетевого графика приведены в таблице 3.2.

Таблица 3.2 -Параметры сетевого графика

Код работы

Ранний срок

Поздний срок

Резервы



0-1

1

0

1

0

1

0

1-2

3

1

4

1

4

0

0

1-3

2

1

5

1

5

2

2

2-3

1

4

5

4

5

0

0

3-4

2

5

7

5

7

0

0

4-5

4

7

11

7

11

0

0

5-6

3

11

14

11

14

0

0

5-7

4

11

15

11

15

0

0

6-8

5

14

19

14

19

0

0

7-8

3

15

19

15

19

1

1

8-9

3

19

22

19

22

0

0

9-10

6

22

28

22

28

0

0

10-11

7

28

35

28

35

0

0

11-12

3

35

38

35

40

2

0

11-13

6

35

41

35

41

0

0

12-13

1

38

41

40

41

2

2

13-14

3

41

44

41

44

0

0


Путь  = 0-1-2-3-4-5-6-8-9-10-11-13-14 является критическим. Его продолжительность равна 44 дня. Сетевой график темы приведен на рисунке 3.1.

Рисунок 3.1 - Сетевой график работ

.2 Анализ и оптимизация сетевого графика

Проведем анализ сетевого графика на основе рассчитанных выше временных характеристик.

Прежде всего, необходимо проверить не превышает ли длина критического пути продолжительности заданного директивного срока. Если это так, то необходимо принять меры по уплотнению графика работ. В рассматриваемом случае директивный срок выполнения  = 50 дней, а продолжительность критического пути  = 44 дня, т.е. не превышает директивного срока.

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

Коэффициент напряженности пути  определяется по следующей формуле:

(3.11)

где - продолжительность рассматриваемого пути;

 - продолжительность критического пути;

 - продолжительность участков, принадлежащих критическому пути.

Расчет коэффициентов напряженности позволяет проанализировать топологию сети в отношении выравнивания коэффициентов напряженности. Чем выше коэффициент напряженности, тем ближе данный путь к критическому и наоборот и чем меньше коэффициент напряженности, тем большими резервами обладает данный путь [8]. Коэффициент напряженности для путей, лежащих на критическом пути, равен 1. Ниже представлен расчет коэффициента напряженности для оставшихся путей.


Далее проводится анализ сетевого графика [6]. При этом определяется вероятность P наступления завершающего события в заданный срок. Для этого с помощью таблиц определяется значение функции Лапласа Ф(Х):

(3.12)

где  - установленный директивный срок;

 - продолжительность критического пути;

 - сумма значений дисперсий (см. табл. 3.1.) работ критического пути.

Дисперсия является мерой неопределенности случайной величины . Для метода двух оценок дисперсия определяется по формуле:

(3.13)

Значение функции  находят по ее аргументу, используя таблицу интеграла Фурье, приводимую в справочниках по математической статистики.

Если  не входит в интервал 0,35 << 0,65, то необходимо провести оптимизацию сетевого графика.

На основании таблицы 3.1. находим

0,04+0,16+0,04+0,04+0,16+0,64+0,36+0,16+0,16+0,16+0,64+0,36++0,36 = 3,28


 лежит в интервале [0,35; 0,65], следовательно, оптимизация сетевого графика не требуется.

.3 Расчет экономическихзатрат

Величину затрат на разработку определим на основе метода калькуляции.Договорная цена разработки определяется как сумма стоимости темы и прибыли, и считается по следующим статьям калькуляции:

-  основные материалы, покупные изделия;

-       основная заработная плата производственного персонала;

-       дополнительная заработная плата;

-       отчисления на социальные нужды;

-       оплата работ, выполняемые сторонними организациями;

-       накладные расходы.

Для проведения разработки требуются следующие изделия: бумага потребительского формата (для оформления документации), интегрированная среда разработки.

Опишем статьи расходов на разработку программного комплекса. Одной из основных статей расходов является заработная плата персонала, занятого в исследованиях при проведении данной дипломной работы. Все расчеты основной заработной платы представлены в таблице 3.3.

Таблица 3.3 - Основная заработная плата

Исполнитель

Месячный оклад

Трудоемкость, чел./дн.

Зарплата



руб.

коп.


руб.

коп.

1

Специалист

30000

00

50

68181

81

2

Технический писатель

20000

00

7

6363

63

Итого

74545

44


Премии составляют 20%.

С учетом премий:80909,08 · 1,2 =89454,53 руб.

Далее необходимо рассчитать дополнительную заработную плату. На эту статью относятся выплаты, предусмотренные законодательством о труде за неотработанное по уважительным причинам время: оплата очередных и дополнительных отпусков и т.п. (в среднем 20-22% от суммы основной заработной платы). Таким образом, дополнительная заработная плата составляет:

,53 · 0,2 = 17890,91 руб.

Так же рассчитаем отчисления на социальные нужды. Отчисления на социальные нужды определяются в процентном отношении от суммы основной и дополнительной заработной платы (30%):

(89454,53 + 17890,91) · 0,3 = 41327,99 руб.

Стоимость основных материалов, покупных изделий и полуфабрикатов с учетом транспортно-заготовительных расходов составляют 10% от суммы основной заработной платы.

,53 · 0,1 = 8945,45 руб.

К статье накладные расходы относятся расходы по содержанию и ремонту зданий, оборудованию, инвентаря. Накладные расходы составляют 250% от суммы основной зарплаты.

,53 · 2,5 = 223636,33 (руб.)

Спецоборудование для работ не использовалось, поэтому расходов по этой статье нет.Сторонние организации участия в работах не принимали.

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

Таблица 3.4 - Стоимость разработки

Наименование статей расходов

Сумма


руб.

коп.

Материалы, покупные изделия и полуфабрикаты

8945

45

Основная заработная плата

89454

53

Дополнительная заработная плата

17890

91

Отчисления на социальные нужны

41327

99

Накладные расходы

223636

33

Итого

381254

56


Договорная цена складывается из оптовой цены предприятия плюс НДС (20%).Оптовая цена предприятия равна полной себестоимости разработки + прибыль(30%).

П = 381254,56·0,3 = 114376,37 руб.

Оптовая цена предприятия = 381254,56+ 114376,37 = 495630,93руб.

НДС = 0,2 ·495630,93= 99126,19 руб.

Д = 495630,93+ 99126,19 = 594757,12руб.

.4 Экономическая целесообразность разработки

При проведении разработки программного комплекса значительное внимание уделяется экономическому обоснованию необходимости проведения данной работы. Экономическая целесообразность данной разработки заключается в следующем:

-   позволит значительно сократить время затрачиваемое на телефонное соединение с клиентом или партнером, трудовые и экономические ресурсы;

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

-          аналогичные решения от других производителей немногочисленны и сильно ограничены в функциональности.

При тестировании панели телефонии удалось добиться следующих результатов:

-   сокращение времени исходящего звонка на 5 - 15 секунд;

-          сокращение времени обработки входящего звонка на 10 - 35 секунд;

-          сокращение времени перевода вызова внутри компании на 1 - 2 минуты.

Данные результаты позволяют посчитать экономию предприятия при использовании панели телефонии. Для обычной компании экономия 10 минут в день на каждого сотрудника составит до 100 минут в день для 10 сотрудников. При стоимости часа работы 150 рублей компания будет экономить 250 рублей в день или 60 тысяч рублей в год. Для служб технической поддержки, операторов центра обработки вызовов - любых сотрудников, которые проводят много времени за телефоном, экономия может достигать 30 минут в день и 300 минут в день на 10 сотрудников. При стоимости часа работы 150 рублей экономия составляет 750 рублей в день или 180 тысяч рублей в год.

Таким образом, экономическая эффективность от внедрения данного продукта растет при увеличении количества вызовов. Если компания принимает большое количество заказов по телефону, затраты на приобретение и внедрение программного комплекса вполне оправданы. Например, уменьшение времени обработки звонка с 3 минут (180 секунд) до 2,5 минут (150 секунд), позволит оператору принять в час на 4 звонка больше. Так, при средней прибыли с каждой продажи 100 рублей и принятия дополнительных 2-х звонков в час на каждого оператора, с 10 операторов дополнительная прибыль компании составит 320 000 рублей в месяц или 3 840 000 рублей в год.

Раздел 4. Производственная и экологическая безопасность

4.1 Аппаратура на рабочем месте

На рабочем месте пользователя программы обычно присутствует следующее оборудование:

-  системный блок компьютера;

-       дисплей;

-       принтер;

-       электрооборудование рабочего места;

-       другие внешние устройства.

Несмотря на повсеместное распространение жидкокристаллических дисплеев, в некоторых случаях по-прежнему используются дисплеи на основе электронно-лучевой трубки (ЭЛТ). В этом случае дисплей является основным источником вредного воздействия для разработчика, поскольку практически всё своё рабочее время разработчик смотрит на дисплей компьютера и подвергается воздействию электромагнитного его излучения. Поэтому вопросам организации рабочего места следует уделить первостепенное внимание.

.2 Анализ производственных опасностей и вредностей на рабочем месте.

Общее описание рабочего места:

-  предметы труда (исходные материалы): информация, в виде технических заданий, графических изображений;

-       средства труда (машины, орудия, сооружения, здания, энергия):персональный компьютер (системный блок, дисплей, клавиатура, мышь, другие устройства);

-       продукты труда, полуфабрикаты: готовые технические решения, программы или части программ, новая информация в виде графиков, схем;

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

-       производственная природно-климатическая среда: рабочее место находится в средней полосе России, где в течение года максимально возможная температура +35 градусов по шкале Цельсия, а минимальная -35 градусов. Средняя летняя температура +25 градусов, средняя зимняя -15 градусов. В зимнее время большую часть дня необходимо искусственное освещение;

-       флора и фауна:в рабочем помещении отсутствует;

-       люди:отсутствуют.

.3 Составление перечня факторов обитаемости

Перечислим основные факторы обитаемости:

-  физические факторы обитаемости;

-           электробезопасность;

-       освещенность;

-       микроклимат;

-       шум и вибрации;

-       электромагнитное излучение;

-  химические факторы обитаемости;

-       биологические факторы обитаемости;

-       психофизиологические факторы обитаемости.

Физические факторы обитаемости. Электробезопасность. При работе за ПЭВМ возможны поражения электрическим токомпользователя. Наиболее вероятными источниками поражения являются блоки ПЭВМ. Чаще всего корпуса устройств и приборов в случае возникновения неисправности в них, например: при нарушении защитного заземления или изоляции проводов, а также при применении неправильных приемов включения в сеть и выключения из сети вилок электропитания.

Основными причинами воздействия тока на человека являются случайные прикосновения или приближения на опасное расстояние ктоковедущим частям; появление напряжения на металлических частяхоборудования в результате повреждения изоляции или ошибочных действий персонала, шаговое напряжение на поверхности Земли в результате замыкания провода и другие. Сопровождающие шум механические вибрации не только вредно воздействуют на организм, но и мешают человеку выполнить как мыслительные, так и двигательные операции. Зрительное восприятие ухудшается под действием вибрации, особенно на частотах между 25 и 40 Гц и между 60 и 90 Гц. Человеческое тело реагирует на вибрацию в основном так же, как и механические системы. Когда частота внешних колебаний приближается к частоте собственных колебаний человеческого тела, равной примерно 5 Гц, действие вибраций на человека особенно опасно.

Переменный ток промышленной частоты можно считать опасным для человека при I=15мА, так как без посторонней помощи невозможно освободиться от токоведущих частей. Условно считают безопасным переменный ток величиной до 10 мА.

ГОСТ 12.1.019 «Система стандартов безопасности труда, электробезопасность, общие требования» в разделе «Средства коллективной защиты» определяет следующий перечень основных видов средств защиты от поражения электрическим током: устройства оградительные, автоматического контроля и сигнализации, защитного заземления, автоматического отключения, выравнивания потенциалов и понижения напряжения, дистанционного управления; изолирующие устройства и покрытия; предохранительные устройства; молниеотводы и разрядники; знаки безопасности[13].

ГОСТ 12.2.007-75 «Изделия электрические, общие требования безопасности» устанавливает требования безопасности, предотвращающие или уменьшающие до допустимого уровня воздействие на человека электрического тока; электрической искры или дуги; движущихся частей изделия; частей изделия, нагревающихся до высоких температур; опасных и вредных материалов, используемых в конструкции изделия, а также опасных и вредных веществ, выделяющихся при эксплуатации [13].

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

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

Производственное освещение должно удовлетворять следующим требованиям:

-  освещенность должна соответствовать характеру труда, который определяется объектом различия, фоном, контрастом объекта с фоном;

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

-       на рабочей поверхности должны отсутствовать резкие тени. Особенно вредны движущиеся тени, которые могут привести к травмам. Тени необходимо смягчать, применяя, например, светильники со светорассеивающими молочными стеклами. На окнах необходимо предусматривать солнцезащитные устройства (например жалюзи);

-       в поле зрения должна отсутствовать блесткость. Блесткость - повышенная яркость светящихся поверхностей, вызывающая нарушение зрительных функций (ослепленность), т.е. ухудшение видимости объектов. Блесткость снижают уменьшением яркости источника света или выбором рациональных углов светильника;

-       величина освещенности должна быть постоянной во времени. Колебания освещенности, вызванные резким изменением напряжения в сети, приводят к значительному утомлению. Пульсация освещенности связана также с особенностями работы газоразрядной лампы. Снижение коэффициента пульсации с 55 до 5% (при трехфазном включении) приводит к повышению производительности труда на 15%;

-       следует выбирать оптимальную направленность светового потока. Наибольшая видимость достигается при падении света под углом 60 градусов к его нормали, а наихудшая при нуле градусов;

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

Анализируя условия работы пользователя программы, получаем следующие требования к производственному освещению:

-  наименьшая допустимая освещенность от общего освещения составляет 200 лк;

-       при работе за компьютером желательно, чтобы освещенность рабочего места не превышала 2/3 нормальной освещенности помещения;

-       экран дисплея не должен быть ориентирован в сторону источников света (окон, настольных ламп и тому подобного); при размещении рабочего места рядом с окном угол между экраном дисплея и плоскостью окна должен составлять не менее 90 градусов (для исключения бликов), прилегающую часть окна желательно закрыть шторой;

-       не следует располагать дисплей непосредственно под источником освещения или вплотную с ним;

-       стена позади дисплея должна быть освещена примерно так же, как и его экран;

-       яркость для блестящих поверхностей более 0,2 кв.м не должна превышать 500 кд/кв.м;

-       показатель ослепленности не должен превышать 40 единиц;

-       коэффициент пульсаций 10 - 20 %.

Специфика работы за ЭВМ, состоит в том, что работать приходится с так называемым самосветящимся объектом.

Свечение со стороны экрана, а также частая смена заставок на экране при большой продолжительности трудовой деятельности может отрицательно воздействовать на зрение. Такой режим работы утомляет зрительные органы. Поэтому разработчику программного обеспечения следует учитывать этот фактор при проектировании программного обеспечения и его отладке за компьютером. Для обеспечения нормальной естественной освещенности, площадь оконных проемов должна быть не менее 25% площади пола.

СанПиН 2.2.2.542-96 устанавливают следующие нормы искусственной освещенности рабочих мест (с высотой рабочей поверхности над полом 80 см):

Норма освещенности:

-  при комбинированном освещении - 750 лк;

-       при общем освещении - 400 лк;

Коэффициент пульсаций освещенности рабочего места Кп ≤ 15%.

Рекомендуемая освещенность при работе с дисплеем составляет 200 лк, а при работе с экраном в сочетании с работой над документами - 400 лк.

Микроклимат. СанПиН 2.2.4.548-96 “Гигиенические требования к микроклимату производственных помещений”. Санитарные правила устанавливают гигиенические требования к показателям микроклимата рабочих мест производственных помещений с учетом интенсивности энергозатрат работающих, времени выполнения работы, периодов года и содержат требования к методам измерения и контроля микроклиматических условий. Показателями, характеризующими микроклимат в производственных помещениях, являются:

-   температура воздуха;

-          температура поверхностей;

-          относительная влажность воздуха;

-          скорость движения воздуха;

-          интенсивность теплового облучения.

Таблица 4.1 - Оптимальные величины показателей микроклимата

Период года

Категорияработпо уровнюэнергозатрат,Вт

Температура воздуха,°С

Температура поверхностей,°С

Относительная влажность воздуха, %

Скорость движения воздуха, м/с

Холодный

Iа (до 139)

22-24

21-25

60-40

0,1


Iб (140-174)

21-23

20-24

60-40

0,1


IIа (175-232)

19-21

18-22

60-40

0,2


IIб (233-290)

17-19

16-20

60-40

0,2


III (более 290)

16-18

15-19

60-40

0,3

Теплый

Iа (до 139)

23-25

22-26

0,1

 

Iб (140-174)

22-24

21-25

60-40

0,1

 

IIа (175-232)

20-22

19-23

60-40

0,2

 

IIб (233-290)

19-21

18-22

60-40

0,2

 

III (более 290)

18-20

17-21

60-40

0,3


Шум и вибрации. Одним из наиболее распространенных факторов внешней среды, неблагоприятно воздействующих на организм человека, является шум.

Любой источник шума характеризуется, прежде всего, звуковой мощностью. Мощность источника (Р) - это общее количество звуковой энергии, излучаемой источником шума в окружающее пространство за единицу времени.

Источниками шума в машинном зале ВЦ являются механические устройства ПЭВМ, установки кондиционирования воздуха, оргтехникой. Человек, работая при шуме, привыкает к нему, но продолжительное его воздействие вызывает общее утомление, может привести к ухудшению слуха, а иногда и к глухоте, нарушается процесс пищеварения, происходит изменение объема внутренних органов. Эти вредные последствия шума тем больше, чем сильнее и продолжительнее его воздействие. В соответствии с СанПиН.2.2.2.-542-96 при выполнении основной работы на ПЭВМ уровень шума на рабочем месте не должен превышать 50 дБА [12].

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

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

Сопровождающие шум механические вибрации не только вредно воздействуют на организм, но и мешают человеку выполнить как мыслительные, так и двигательные операции. Зрительное восприятие ухудшается под действием вибрации, особенно на частотах между 25 и 40 Гц и между 60 и 90 Гц. Человеческое тело реагирует на вибрацию в основном так же, как и механические системы. Когда частота внешних колебаний приближается к частоте собственных колебаний человеческого тела, равной примерно 5 Гц, действие вибраций на человека особенно опасно.

Для борьбы с шумом и вибрацией осуществляются следующие мероприятия:

-  облицовка рабочих помещений шумопоглощающей плиткой;

-       использование различных шумоуловителей;

-       расположение устройств на резиновых прокладках, амортизаторах;

-       смазка механических узлов ПЭВМ.

Электромагнитное излучение. Наиболее вредным производственным воздействием является побочное электромагнитное и рентгеновское излучения. Практически все вредное излучение возникает в результате работы монитора компьютера - доля электромагнитных полей, создаваемых компонентами системного блока компьютера незначительны. Монитор является источником сразу нескольких видов излучений, каждое из которых имеет свои вредные факторы.

Частотный состав (спектр) излучения монитора характеризуетсяналичием рентгеновских, ультрафиолетовых, инфракрасных и другихэлектромагнитных колебаний. Рентгеновское излучение, возникающее вместе со свечением люминофора в результате бомбардировки поверхности экрана электронами. Мощность дозы рентгеновского излучения на расстоянии 5 см от поверхности экрана при 41-часовой рабочей неделе не должна превышать 0.03 мкР/с. Но опасность рентгеновского и части других излучений большинством ученых признается пренебрежимо малой, поскольку их уровень достаточно невелик и в основном поглощается покрытием экрана. Наиболее тяжелая ситуация связана, по-видимому, с полями излучений очень низких частот (ОНЧ) и крайне низких частот (КНЧ), которые, как выяснилось, способны вызывать биологические эффекты при воздействии на живые организмы. Специальные измерения показали, что мониторы действительно излучают магнитные волны, по интенсивности не уступающие уровням магнитных полей, способных обусловливать возникновение раковых опухолей. Важной особенностью монитора является конструкция электронно-лучевой трубки, которая уменьшает до минимума излучение в сторону оператора. Но расстояние от глаз оператора до поверхности монитора должно составлять не менее 30 см. Соответственно максимум излучения сосредоточен по бокам и в задней части монитора, что предъявляет определенные требования к планированию взаимного расположения рабочих мест - операторы не должны находиться под влиянием ЭМИ соседних компьютеров. Поэтому рабочие места должны планироваться так, чтобы соблюдалось расстояние не менее 1,22 м от боковых и задних стенок других компьютеров. Следует иметь в виду, что магнитное излучение ничем не задерживается. В настоящее время все мониторы должны соответствовать стандартамMPR-II, ТСО-99, ТСО-03 и другим, ограничивающим излучения мониторов в диапазоне крайне низких частот. Принимая во внимание все вышеизложенные сведения, можно сделатьвывод о том, что необходимо проводить комплексную оценкуэлектромагнитной обстановки в рабочих помещениях с компьютерами сучетом взаимного расположения рабочих мест.

Таблица 4.2 - Требования к электромагнитным полям монитора

Наименования параметров

Допустимые значения


СанПиН 2.2.2.542-96

ТСО-99

Напряженность электромагнитного поля по электрической составляющей не более в диапазоне частот: 5 Гц - 2 кГц 2 кГц - 400 кГц

  25 В/м 2,5 В/м

10 В/м 1 В/м

Плотность магнитного потокав 50 см вокруг дисплея не болеев диапазоне частот: 5 Гц - 2 кГц 2 кГц - 400 кГц

50 нТ 25нТ

200 нТ 25 нТ

Поверхностный электростатический потенциал не должен превышать

500 В

500 В


Следует отметить, что результаты наблюдений показывают соответствие проверяемых мониторов современным требованиям по всем параметрам. Наиболее распространенные мониторы с диагональю 17-19 дюймов имеют достаточную частоту смены кадров (85-более Гц), защищены от бликов, от накопления на экране статического потенциала, корпус экранирован, вследствие чего их эргономическая безопасность, как по визуальным, так и по эмиссионным параметрам соответствует нормам.

Химические факторы обитаемости. Электронно-вакуумная гигиена или, другими словами гигиена помещения, обеспечивается комплексом мероприятий по защите оборудования и материала от пыли и других загрязнений.

Источниками загрязнений служат все предметы, с которыми соприкасается работающий персонал (бумага, книги, офисная техника, одежда). Одним из главных источников загрязнений является воздух - основная среда, в которой ведется работа. Из него могут попасть любые загрязнения. Поэтому чистоте воздуха в помещениях уделяется большое внимание. Поступающий в производственные помещения не кондиционированный воздух должен распределяться так, чтобы различного рода загрязнения в них были минимально возможными. Этого добиваются комплексом технических и гигиенических мероприятий. Для обеспечения необходимой чистоты воздушной среды наружный воздух перед подачей в производственные помещения пропускают через систему фильтрующих газоочистных, термо- и влагорегулирующих устройств. Воздух очищается от пыли, масел, вредных газов и доводится до необходимой температуры и влажности. Запыленность воздуха не должна превышать 1 мг/м, а размеры пылинок - 3 мкм.

Кроме пыли, в атмосфере могут содержаться соли, кислоты, газы, которые увеличивают коррозию металлов, усиливают процесс старения в пластмассах и органических диэлектриках. Концентрация коррозионно-активных веществ в приточном воздухе должна быть не выше приведенных в ГОСТ 17.2.3.02.78 «Охрана природы, атмосфера, правила установления допустимых выбросов вредных веществ промышленными предприятиями» предельно допустимых концентраций этих веществ в атмосферном воздухе населенных мест.

Биологические факторы обитаемости. Производственное помещение чистого типа не способствует распространению биологически опасных факторов.

Психофизиологические факторы обитаемости. Отрицательные факторы, воздействующие на пользователя ПК, можно разделить на две группы. Первые связаны с психологическими и физиологическими особенностями человека. Это монотонность работы операторов при вводе текстов, эмоциональные перегрузки, стрессы из-за вероятности как сбоев в системах, так и появления собственных ошибок, перегрузки ряда систем организма (глаз, мышц кисти, предплечья, шеи и спины). Немаловажен также и недостаток физической нагрузки на другие части организма. Факторы второй группы связаны с внешними условиями, в которых находится во время работы пользователь: нарушение эргономических требований на рабочем месте, дискомфортный микроклимат. При длительной работе, а также во взаимодействии с другими вредными факторами, сопровождающими эксплуатацию ПК, возникает эффект накопления воздействия электромагнитных полей, что может привести к ряду серьезных нарушений здоровья пользователей. Так на органы зрения влияют даже поля малой интенсивности (возможно развитие катаракты, глаукомы и других серьезных заболеваний), а электростатическое поле может вызвать отслоение роговицы глаза. Кроме того, электростатическое поле приводит к дефициту отрицательных аэроионов и к повышенной концентрации пыли в воздухе рабочей зоны. Последнее усугубляет негативное влияние электромагнитных полей на здоровье пользователя. Воздействие их на головной мозг со временем также может привести к серьезным заболеваниям - вплоть до развития злокачественных образований.

Психофизиологические факторы в зависимости от характера действия делятся на следующие группы: физические перегрузки и нервно-психические перегрузки (усталость глаз, монотонность труда, эмоциональные перегрузки).

Монотонность - психическое состояние человека, вызванное однообразием восприятия или действий.

Под утомлением понимается процесс понижения работоспособности, временный упадок сил, возникающий при выполнении определенной физической или умственной работы.

Для уменьшения влияния этих факторов необходимо применять оптимальные режимы труда и отдыха в течение рабочего дня:

-  общее время работы за дисплеем не должно превышать 50% всего рабочего времени;

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

-       предпочтительнее использовать дисплеи с высокой разрешающей способностью и удобным размером экрана;

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

Рабочая поза оказывает значительное влияние на эффективность работы человека. Основные требования к рабочим местам при выполнении работы, сидя приведены в ГОСТ 12.2.033-78 «ССБТ. Рабочее место при выполнении работ сидя. Общие эргономические требования» [13].

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

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

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

Условия зрительного восприятия. Для эффективной работы с монитором особенно важна скорость и точность восприятия зрительной информации. Эффективность ее восприятия зависит от ряда условий. Чтобы четко различать объект при нормальной остроте зрения необходимо:

-  определенный уровень освещенности и размера объекта;

-       необходимая контрастность фона;

-       достаточный размер объекта, точнее достаточная величина углового размера объекта, т.е. отношение линейной величины объекта к расстоянию наблюдения;

-       необходимая экспозиция - время, требуемое для различения объекта.

В случае если приведенные выше условия ниже минимальных, то объект теоретически не может быть различим. Оптимальное расстояние глаза от объекта зависит от величины рассматриваемого объекта и остроты зрения. Оператор, как правило, работает с текстовой информацией, и поэтому символы на экране увеличены в 1,5-2 раза по сравнению с символами печатного текста, оптимальное расстояние до которого 25-35 см.

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

.4 Расчет защиты от статического электричества

По определению ГОСТ 17.1.018-79 “Статическое электричество. Искробезопасность” термин “статическое электричество” означает совокупность явлений, связанных с возникновением, сохранением и релаксацией свободного электрического заряда на поверхности и в объеме диэлектриков и полупроводников, изделий на изолированных (в том числе диспергированных (лат. dispergo - рассеивать; порошки, эмульсии) в диэлектрической среде) проводниках [13].

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

Этот же ГОСТ дает определение понятию электростатической искробезопасности (ЭСиБ) как состояние объекта, при котором исключена возможность взрыва и пожара от статического электричества. Электростатическая искробезопасность должна обеспечиваться путем устранения разрядов статического электричества, способных стать источником зажигания огнеопасных веществ (материалов, смесей, изделий, продукции).

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

Согласно гипотезе о статической электризации тел при соприкосновении двух разноразрядных веществ из-за неравновесности атомных и молекулярных сил на их поверхности происходит перераспределение электронов (в жидкостях и газах еще и ионов) с образованием двойного электрического слоя с противоположными знаками электрических зарядов. Таким образом, между соприкасающимися телами, особенно при их трении, возникает контактная разность потенциалов, значение которой зависит от ряда факторов - диэлектрических свойств материалов, значения их взаимного давления при соприкосновении, влажности и температуры поверхностей этих тел, климатических условий.

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

При одинаковых значениях диэлектрической постоянной e соприкасающихся материалов электростатические заряды не возникают.

Заземлением какой-либо части электроустановки называется преднамеренное электрическое соединение этой части с заземляющим устройством.

Защитным заземлением называется заземление частей электроустановки с целью обеспечения электробезопасности.

Заземляющим устройством называется совокупность заземлителя и заземляющих проводников.

Заземляющим проводником называется проводник, соединяющий заземляемые части с заземлителем.

Заземлителем называется проводник (электрод) или совокупность металлических соединенных между собой проводников (электродов), находящихся в соприкосновении с землей.

Сопротивление заземляющего устройства в любое время года должны быть не более 2, 4, 8, Ом соответственно при линейных напряжениях 660, 380, 220 В источника трехфазного тока. Это сопротивление должно быть обеспечено с учетом использования естественных заземлителей, а также заземлителей повторных заземлений нулевого провода ВЛ до 1кВ при количестве отходящих линий не менее двух.

При наличии заземления сопротивление изоляции замкнутой на корпус фазы будет определяться в основном сопротивлением заземляющего устройства R3. Поэтому при определении силы тока в цепи человека, прикоснувшегося к аварийному корпусу для сети с глухозаземленной централью, получим формулу (4.1):

(4.1)

где - сопротивление заземления нейтрали,

-сопротивление тела человека;

-сопротивление одиночного заземлителя (нормируемое).

Значение тока примем равным J=1мА. Согласно справочнику по технике безопасности в таблице “характер воздействия электрического тока на организм человека” для тока J=0.6 - 1.6 мА характер воздействия определен следующим образом: “Начало ощущения - слабый зуд, пощипывание кожи”.

Тогда для получим формулу (4.2).

(4.2)


Таким образом, нормируемое значение одиночного заземления принимаем равным:  = 2,6 Ом.

Ток, проходящий через заземлитель в землю, преодолевает сопротивление называемое сопротивлением заземлителя растеканию тока или просто сопротивлением растеканию.

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

Сопротивление заземлителя растеканию тока должно удовлетворять условию (4.3).

(4.3)

Выберем тип заземлителя: стержневой у поверхности земли. Схема заземлителя имеет вид представленный на рисунке 4.1.





Рисунок 4.1 - Схема заземлителя

Сопротивление заземлителя данного вида определяется по формуле (4.4).

(4.4)

где  - удельное сопротивление грунта, Ом;

l- длина заземлителя, см;

d- диаметр заземлителя, см.

Для нашего случая грунтом является глина обычная с сопротивлением(Ом·см); l = 200 см; d = 80 см; тогда в итоге получим (4.5).

(4.5)

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

Количество заземлителей определяют по формуле (4.6).

(4.6)

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

Так как, отношение, то коэффициент =0,7;

где  - расстояние между заземлителями.

Тогда получим:


Длину полосы, соединяющей заземлители, определяем по формуле (4.7).

(4.7)

Сопротивление растеканию тока токосоединительной полосы определяем следующей формулой (4.8).

(4.8)

Подставляя исходные данные получим:


При этом мы учитываем,чтосм - суммарная длина всех полос; b=80 см - ширина полосы;  Ом.

Определим сопротивление растеканию тока всего заземляющего устройства по формуле (4.9).

(4.9)

где - коэффициент использования соединительной полосы, зависящий от отношения  и от числа заземлителей в контуре.


4.5Экологическая безопасность

Вредного влияния компьютера на окружающую среду во время работы в настоящее время не выявлено. Но открыт вопрос о переработке устаревшего оборудования, которая проводится согласно ГОСТу 30773-2001 «Ресурсосбережение. Обращение с отходами. Этапы технологического цикла. Основные положения».

.6 Пожарная безопасность

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

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

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

Для тушения пожара должны применяться ручные огнетушители ипереносные установки. На предприятиях электронной промышленности чаще всего при пожарах применяются пенные огнетушители ОП-3 или ОП-5, также иногда ОХП-10. Электросети и электроустановки, которые находятся под напряжением, тушить водой нельзя, т.к. через струю воды может произойти поражение электрическим током. Именно поэтому для тушения пожара, который возник из-за неисправности электроприборов, применяют только пенные огнетушители.

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

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

Меры пожарной безопасности- действия по обеспечению пожарной безопасности, в том числе по выполнению требований пожарной безопасности.

На территории Российской Федерации действуют следующие основные нормативные документы:

-  федеральный закон № 69-ФЗ О пожарной безопасности от 21.12.1994;

-       правила пожарной безопасности (ППБ 01-03);

-       федеральный закон № 123-ФЗ Технический регламент о требованиях пожарной безопасности.

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

-  аварийное отключение оборудования;

-       различные сигнализации.

Категории помещений по взрывопожарной и пожарной опасности

Категория помещения "А" взрывопожароопасная помещения, в которых находятся горючие газы, легковоспламеняющиеся жидкости с температурой вспышки не более 28ºС в таком количестве, что могут образовывать парогазовоздушные смеси, при воспламенении которых развивается расчетное избыточное давление взрыва в помещении, превышающее 5 кПа, или вещества и материалы, способные взрываться и гореть при взаимодействии с водой, кислородом воздуха или друг с другом в таком количестве, что расчетное избыточное давление взрыва в помещении превышает 5 кПа. Категория помещения "Б" взрывопожароопасная помещения, в которых горючие пыли или волокна, легковоспламеняющиеся жидкости с температурой вспышки более 28ºС, горючие жидкости находятся в таком количестве, что могут образовывать взрывоопасные пылевоздушные и паровоздушные смеси, при воспламенении которых развивается расчетное избыточное давление взрыва в помещении, превышающее 5 кПа.

Категория помещения "В" пожароопасная помещения, в которых горючие и трудногорючие жидкости, твердые горючие и трудногорючие вещества и материалы (в том числе пыли и волокна), вещества и материалы, находящиеся в помещении, способны при взаимодействии с водой, кислородом воздуха или друг с другом гореть, при условии, что помещения, в которых они имеются в наличии или обращаются, не относятся к категориям А или Б. Категория помещения "Г" помещения, в которых находятся негорючие вещества и материалы в горячем, раскаленном или расплавленном состоянии, процесс обработки которых сопровождается выделением лучистого тепла, искр и пламени; горючие газы, жидкости и твердые вещества, которые сжигаются или утилизируются в качестве топлива. Категория помещения "Д" помещения, в которых находятся негорючие вещества и материалы в холодном состоянии.

Методы противодействия пожару делятся на:

-  уменьшающие вероятность возникновения пожара (профилактические);

-       защиту и спасение людей от огня.

Предотвращение распространения пожара достигается мероприятиями, ограничивающими площадь, интенсивность и продолжительность горения. К ним относятся:

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

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

-       снижение технологической взрыво-пожарной и пожарной опасности помещений и зданий;

-       наличие первичных, в том числе автоматических и привозных средств пожаротушения; сигнализация и оповещение о пожаре.

Бытовые действия, уменьшающие вероятность возникновения пожара:

-  электропроводку во избежание возникновения короткого замыкания, способного привести к пожару, изолируют;

-       изолируют от влаги розетки, расположенные в санузлах и на внешних стенах;

-       устанавливают УЗО и автоматические предохранители;

-       теплоизолируют газовые и электрические плиты от деревянной мебели;

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

Защита непосредственно от пожара делится на защиту человека от высокой температуры и от зачастую более опасных отравляющих веществ, выделяемых при пожаре в воздух. Используют термоизолирующую одежду БОП (боевую одежду пожарного), изолирующие противогазы и аппараты на сжатом воздухе, фильтрующие воздух капюшоны по типу противогазов. Активная борьба с пожаром (тушение пожара) производится огнетушителями различного наполнения, песком и другими негорючими материалами, мешающими огню распространяться и гореть. Также иногда огонь сбивают взрывной волной. Для самоэвакуации людей из горящих зданий применяется лебёдка, закреплённая с внешней стороны окна, по которой проживающие на высоких этажах люди могут спуститься на землю. Для защиты ценных вещей и документов от огня применяются несгораемые сейфы.

Заключение

В специальном разделе дипломного проекта была разработана система автоматизации телефонных соединений. Данная система включает в себя компоненту связи 1С:Предприятия и сервера телефонии Asterisk, а так же графический интерфейс к ней. Компонента состоит из отдельных логических блоков, реализующих все возможные варианты использования сервера телефонии: управление голосовыми сообщениями, факсами и смс. На основании анализа существующих решений и текущих потребностей показана актуальность создания программного комплекса, сформулированы основные требования к подсистемам.

При рассмотрении поставленной задачи и технических требований разработаны: общая схема алгоритма программы, алгоритм подпрограммы получения строки от сервера Asterisk, алгоритм подпрограммы получения истории вызовов, алгоритм проверки дополнительных событий от сервера телефонии. Так же был разработан графический интерфейс пользователя, система передачи факсов и смс, система шифрованияданных.

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

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

В разделе производственная и экологическая безопасность были рассмотрены требования охраны труда и разработаны рекомендации по оптимизации санитарно-гигиенической обстановки при работе с программным комплексом. Была рассчитана защита от статического электричества. Проведен анализ производственных вредностей и опасностей на рабочем месте пользователя программы.

Разработанная компонента связи 1С и Asterisk была сертифицирована компанией 1С и получила сертификат "Совместимо! Система программ 1С:Предприятие". Разработка программного комплекса автоматизации телефонных соединений на этом не закончена. Дорабатываются механизмы встраивания в конфигурации, добавляются новые возможности. Продукт пользуется устойчивым спросом у клиентов.

Список использованных источников

1      Д. Ван Меггелен, Л. Мадсен и Д. Смит - Asterisk: будущее телефонии; Изд. Символ, 2009

2      http://www.asterisk.ru/- Asterisk IP АТС по-русски

3      Колмен Карпентер, Дэвид Даффет, Ник Мидлтон, Иан Плейн - «Asterisk 1.4 Пособие для профессионалов» Внедрение, администрирование и консалтинг коммерческих IP телефонных решений, Пакт Паблишинг, 2009

4      Герберт Шилдт - Полный справочник по C#; Изд. Вильямс, 2008

5      Тони Нортрап, Шон Вилдермьюс, Билл Райан - Основы разработки приложений на платформе Microsoft .NET Framework; Изд. Русская Редакция, 2007

6      Баричев С.Г., Гончаров В.В., Серов Р.Е. 2.4.2. Стандарт AES. Алгоритм Rijdael // Основы современной криптографии. - М.: Горячая линия - Телеком, 2002

7      Клюев А.С - Проектирование систем автоматизации технологических процессов; Энергоатомиздат, 1990

8      Добсон С., Полфреман С. - Основы экономики, учебное пособие; Экоперспектива, 2004

9      Каракеян В.И., Никулина И.М., учебное пособие “Безопасность жизнедеятельности”. Москва, “Юрайт-Издат”, 2009

10    Никулина И.М. “Методические указания по выполнению домашних заданий по курсу БЖД”. Москва, МИЭТ, 2008

11    Белов С.В. Безопасность жизнедеятельности - М.: Высш. Шк., 2005

12    Санитарные правила и нормы СанПиН 2.2.2.542-96 “Гигиенические требования к видеодисплейным терминалам, персональными ЭВМ и организации работы”

13    http://www.gost.net.ru- библиотека ГОСТов

Похожие работы на - Разработка проекта автоматизации обработки звонков и сообщений

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!