...

суббота, 10 ноября 2018 г.

Был нужен отчет…

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

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

Конечно теперь у многих организаций есть информационные системы инвентарного учета, но структура конкретного учета определяется конфигурацией данной информационной системы и заложенной информационной моделью учитываемых объектов организации.
В данной статье хочу описать подход к проектированию информационной модели учетной (inventory) системы на основе требований к необходимой отчетности предприятия…
Очевидно, что для актуального сводного отчета как и прежде нужны первичные данные с мест, а чтобы избежать авралов в отчетный период пользователи на местах должны регулярно вводить необходимую информацию. Чтобы не перегружать многих пользователей ненужной работой при создании системы нужно четко определить какие минимально необходимые исходные данные нужны для отчетности. Состав этих данных и их организация в совокупности определяют информационную модель системы.

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

Модель инфраструктуры


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

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

Шахматные доски


Возможно сейчас на рынке есть некое готовое решение для решения таких задач, возможно даже это все как то можно сделать в Экселе — буду рад советам, подсказкам, альтернативным предложениям. Я ничего готового не нашел и вынужден был написать свой небольшой кусочек в среде корпоративного web приложения на платформе СУБД ORACLE (суть не в том как сделано — в статье описывается общий принцип).

Изображение требуемого отчета загружается в виде скана (фотографии) и размещается под прозрачной «Шахматной доской» от которой на картинках видна только разметка. Доска эта — в данном случае просто прозрачная таблица, размещаемая поверх загруженного в систему изображения отчета. Таблица имеет разметку столбцов буквами и строк цифрами, что позволяет визуально определить к какой ее ячейке относится область рисунка — скана отчета, содержащая интересующий нас элемент. Естественно масштабирование рисунка-скана и таблицы в браузере должно быть синхронизировано, чтобы ничего не съезжало.

В интерфейсе пользователя выглядит так (примеры отчетов для железнодорожников):

Тут все просто — есть 2 фрейма — в правом сама картинка на «Шахматной доске», а слева табличка для ручного ввода строк содержащих необходимые (по мнению аналитика):

  • Объект информационной модели — первичный объект учета к свойствам которого, относятся изображенные в ячейке (столбце) сканированного отчета характеристики
  • Характеристику (Атрибут, Параметр) указанного объекта информационной модели
  • Позицию на доске, например на первом рисунке строка 1 соответствует «Б-34»

Формирование модели учета


Таким образом информационная модель системы учета (inventory) формируется на основании обоснованных необходимостью использования в конкретных требуемых отчетах Объектов и их параметров.

Учет и Объектов и их Параметров ранее был сделан формализовано в виде отдельных справочников-классификаторов — результат этого сформированные:

  • общая структура-дерево объектов учета
  • карточки объектов учета, содержащие параметры. включенные в них из единого справочника-классификатора параметров и упорядоченные по группам либо переупорядоченные в соответствии с конкретными потребностями учета данного объекта

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

Заключение


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

Благодарю за внимание!

Let's block ads! (Why?)

[Из песочницы] 8 с ½ способов приоритизировать функциональности

В 99% случаев всего не попробовать, все задачи не закрыть, все баги не исправить. Один из ключевых навыков — из всего потока выбирать те задачи, решение которых, даст максимально пользы.

Выбирать такие задачи помогают методы приоритезации и здравый смысл.

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

Одна из простых и общих техник приоритезации. Горизонтальная ось — сложность, вертикальная — польза. Цель — выделить простые задачи с максимальной пользой.

Пример осей: стоимость разработки и увеличение конверсии. Т. е., среди всех задач выделяем задачи с минимальной стоимостью разработки и максимальным увеличением конверсии.

Выбираем параметры, по которым будем ранжировать функциональности. К примеру, две группы параметров:

Выгода:


  1. увеличит оборот,
  2. ценность для клиента,
  3. ценность для компании.

Стоимость:


  1. сложность внедрения,
  2. стоимость разработки,
  3. риски.


Расчёт по параметрам в Google Spreadsheet.

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


  • 1 балл: мало выгоды, высокая стоимость;
  • ...
  • 5 баллов: максимальная выгода, низкая стоимость.

Та функциональность, что наберёт больше всех баллов — искомая важная функциональность.

Обратите внимание, что в группе «Стоимость» максимальный балл означает минимальную стоимость.


2.1 Пиратские метрики (AARRR)

Частный случай оценки по параметрам. В качестве параметров используем AARRR и оцениваем вклад задачи в каждую метрику:


  1. привлечение,
  2. активация,
  3. удержание,
  4. распространение
  5. и доход.


Расчёт в Google Spreadsheet.

Как и в общем случае, метрикам назначаем вес.

Самая важная задача — задача с максимальным количество баллов.

Модель Кано — метод оценки эмоциональной реакции потребителей на конкретные характеристики продукта.

Опуская детали, выводы из этой модели:


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

Формируя список работ, спросите себя:


  1. Мы реализовали все базовые функции?
  2. А сколько у нас основных?
  3. Исследуем аудиторию, разыскиваем восхищающие функции?
  4. Помним, что восхищающие станут основными впоследствии, а позже и базовыми?

Суть:


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

  1. Каждый член команды записывает свои идеи на стикерах (одна идея — один стикер);
  2. затем в командах объединяют схожие идеи в группы и дают группам имена;
  3. в конце мероприятия каждый член команды голосует или указывает важность группы в баллах.

Итог: ранжированные группы с идеями для новых задач.

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

Выбирая задачи для разработки, спросите себя:


  • на каком уровне мы сейчас?
  • Что сделать сейчас, чтобы завтра мы перешли на новый уровень?
  • Результаты задач, которые мы выбрали, нужны пользователям?

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

Получив запрос на функциональность от отдела продаж, узнайте у них:


  • Почему потребители спрашивают об этом?
  • Это задача — часть более крупной тенденции?

Для каждой функциональности оцениваем:


  1. охват (Reach). Как много пользователей это коснётся за конкретный период времени?
  2. Влияние (Impact). Как сильно это повлияет на конверсию? (максимально — 3, сильно — 2, средне — 1, мало — 0,5 и минимально — 0,25).
  3. Надёжность (Confidence). Насколько вы уверены в своих предположениях? (Максимально — 100%, средне — 80% и низко — 50%).
  4. Трудоёмкость (Effort). Сколько человеко-месяцев это потребует? (Минимум полмесяца и целые числа).

Собираем данные в таблицу и рассчитываем оценку по формуле:

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


Расчёт в Google Spreadsheet.

Приведённые методы не помогут создать продукт, определить потребность и готовность платить за её удовлетворение. Максимальное количество баллов RICE не гарантирует, что после внедрения функциональности произойдёт чудо.

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


Let's block ads! (Why?)

[Из песочницы] Как протестировать приложение при взаимодействии с API с помощью SoapUI

Многие используют SoapUI для того, чтобы тестировать как сам API, так и приложения, обращающиеся к API. Довольно гибкий инструмент, позволяющий, например, экспортировать swagger файл API и сгенерировать Mock-service на его основе.

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

image

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

Для начала создаем Mock-service в SoapUI. Это делается в несколько кликов:

image

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

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

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

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

Post: http://mockserver:8080/setscenario
Body: ScenarioId=0&Authentication=200_OK&AutoSystemHome=400_TokenIsMissing…


В Mock-сервисе добавляем обработку запроса «SetScenario». Он имеет всего два ответа: «200_OK» в случае корректной обработки входящего запроса, и «400_BadRequest» если запрос был составлен неверно:

image

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

def reqBody = mockRequest.getRequestContent() //считываем тело запроса
def reqBodyParams = [:]
reqBody.tokenize("&").each //собираем входные параметры, переданные в запросе
{
        param->
        def keyAndValue = param.split("=")
        reqBodyParams[keyAndValue[0]]=keyAndValue[1]
}
if (reqBodyParams.containsKey('ScenarioId')) // ID сценария как обязательный параметр (необходим для упрощения разбора логов); сюда можно добавить проверки на прочие обязательные для вас параметры запроса
{
// назначаем глобальные переменные, в которых будем хранить переданные значения ответов для заглушек, “?:” – означает какое дефолтное значение будет назначено в случае отсутствия переданного:
        context.mockService.setPropertyValue("ScenarioId", reqBodyParams["ScenarioId"] ?: "0")
        context.mockService.setPropertyValue("Authentication", reqBodyParams["Authentication"] ?: "200_OK")
        context.mockService.setPropertyValue("AutoSystemHome", reqBodyParams["AutoSystemHome"] ?: "200_OK")
        // и так далее для каждого метода …
        
        return "200_OK"
}
else 
{
        return "400_BadRequest"
}


Назначенные переменные можно увидеть в окне настроек сервиса:

image

Таким образом, мы описываем всю логику работы Mock-сервиса именно в этом методе, а в заглушках для методов АПИ достаточно написать скрипт, считывающий значение ответа из глобальной переменной:

image

Authentication = context.mockService.getPropertyValue("Authentication")
return "${Authentication}"


image
AutoSystemHome = context.mockService.getPropertyValue("AutoSystemHome")
return "${AutoSystemHome}"


Если необходимо добавить сценарии таймаутов, задержки в ответах, то добавляем переменную delay, к примеру:
Post: http://mockserver:8080/setscenario
Body: ScenarioId=0&Delay=600&Authentication=200_OK &AutoSystemHome=400_TokenIsMissing…


А в скрипт заглушки добавляем:
…
Authentication = context.mockService.getPropertyValue("Authentication")
Delay = context.mockService.getPropertyValue("Delay").toInteger()
sleep(Delay)
return "${Authentication}"


Если необходимо поддержать повторный запрос, то передаем список ответов:
Body: Authentication:400_MissingParametersClientId;400_MissingParametersClientId;200_OK

А в скрипте обработки добавляем tokenize и удаление уже отправленного ответа, в случае если он не последний:
def Authentication = []
Authentication = context.mockService.getPropertyValue("Authentication").tokenize("%3B")
if (Authentication.size() > 1)
{
        Authentication.remove(0)
        Authentication = Authentication.join("%3B")
        context.mockService.setPropertyValue("Authentication", Authentication)
}


Как итог мы получили простой Mock-сервис, который легко перемещать между тестовыми стендами и средами, ведь файл проекта – это xml-файл. Сервис запускается сразу после импортирования, без дополнительных настроек (за исключением изменения адреса сервера и порта, конечно). В данный момент он помогает нам тестировать приложение независимо от стабильности АПИ сервера и возможных временных периодов его недоступности.

Что планируем добавить: интегрировать это решение для тестирования приложений до и во время разработки самого АПИ. Например, когда уже готово его описание в виде swagger-файла, но сервер в процессе настройки. Циклы разработки АПИ и клиентских приложений не всегда совпадают. В этот момент полезно на чем-то тестировать разрабатываемое клиентское приложение, и Mock-сервис может сильно помочь.

UPD: в случае если появятся вопросы и полезные замечания.

Let's block ads! (Why?)

Компоненты электровелосипеда: мотор

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

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

Итак, начнём:
По большому счёту приводные элементы электровелосипедов можно рассортировать в 3 вида:

1. каретный электродвигатель, электродвигатель с центральным расположением.
2. редуктороне мотор-колесо (geared hub motor).
3. моторколесо с прямым приводом ( директ-драйв).

Начнём с номера первого: мид-драйв, центральный

Оно, кстати, довольно популярно в брендовых всяких европейских электровелосипедах.

Находится вблизи каретки ( педалей) велосипеда, через цепной привод, и механизм передачь,
если на велосипеде такой есть, вращает заднее колесо.

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

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

Номер второй: Редукторник, geared

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

Тут слева — директдрайв, справа — редукторник:

редукторный мотор:

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

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

Номер третий: директдрайв

Самая, вроде, надёжная система за счёт минимизации лишних деталей — чистый электродвигатель, ротор сидит на оси и неподвижен относительно вилки,
статор вращается вместе с колесом.


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

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

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

Итак, в целом — редукторное моторколесо более тяговитое и более экономичное.
Директдрайв — более скоростной, так что если хочется ездить на скоростях 40 — 50+, то скорее стоит присматриватся к директдрайвам.
Также у директдрайва посредством контроллера можно реализовать режим рекуперации — перевод электродвигателя в режим генератора с запасанием выработанной энергии обратно в аккумуляторную батарею.
Эффект от подзарядки аккумулятора рекуперацией достаточно мизерный — порядка увеличения на 2-3 процента пробега, плюс ещё там есть ньюансы в виде больших токов зарядки, и того, что заряжать литиумный акб при температурах ниже +5 цельсия — это убивать его ( относится и к мобилам и прочим бытовым девайсам на литий-ионе и литий -полимере, кстати), но зато его можно использовать в качестве тормоза, и таким образом экономить тормозные колодки.

Кстати, в «большом электротранспорте», в виде, к примеру, электропоездов ЭР2Т, рекуперативное торможение точно так и используется — до скорости порядка 25 кмч поезд тормозит чисто введением тяговых электродвигателей в режим генераторов, отдавая выработанную электроэнергию обратно в контактную сеть.

Для экономичного вождения много полезнее минимально пользоватся торможением, и максимально — накатом — то есть видя красный сигнал светофора, к примеру, не переть прямо до него на газу, а метров за 300 закрыть газ, и накатом двигатся, чтобы к приезду к светофору иметь скорость не более 10-15 кмч.

Что ещё: скорость езды.
Один из наиболее частых вопросов новичков — как быстро мой велосипед будет ехать на электроприводе?
Это прямо зависит от четырёх вещей:

1. Обороты холостого хода мотор-колеса при номинальном напряжении:
Нормальный продаван их либо указывает, либо из можно из него выбить.
У моего моторколеса, к примеру, это 310 RPM при 48V. При замере китайским тахометром,
оказалось 305 оборот в минуту при питании от 4 последовательно соединённых свинцовых акб по 12 вольт ( примерно 50 вольт фактически) на вывешенном колесе — приемлемо.
Не забывайте, что это обороты мотор-колеса без нагрузки, это важно!

2. Диаметр обода колеса. Понятно, что чем больше окружность колеса, тем больше будет фактическая скорость при равных оборотах.

Формула для рассчёта: окружность колеса в милиметрах / 1000 * ( обороты мотор-колеса /60) = скорость в метрах в секунду. Для километров в час умножить на 3.6, для получения финальной прогнозируемой скорости — всё это ещё поделить на 1.2, ибо обороты под, даже вполне посильной нагрузкой, будут ниже, чем без нагрузки ( приблизительно на 20 процент, да).

3. Соответствие мощности к сопротивлению движению.
Если у вас расчётная скорость получилась 50 кмч, для достижения и поддержания таковой скорости мотор должен будет развивать мощность порядка киловатта, или 1000 ватт.
если ваш мотор будет развивать мощность в 500 ватт, то из за сопротивления вращению он не сможет достичь своих максимальных оборотов, понятно, и вы будете довольствоватся максимальной скоростью в 37 кмч вместо 50 — при этом мотор ещё будет довольно сильно греться из за перегрузки, если вы на такой скорости будете ездить на до конца выкрученной ручке газа.

4. Напряжение питания.

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

Так вот, не обязательно питать моторколесо контроллером и батареей на указанное напряжение.
Вы можете питать 48-вольтовый мотор батареей и контроллером на 36 вольт.
Или на 24, или на 60 вольт — при этом скорость вращения мотор-колеса на полном газу будет соотвественно 0.75, 0.5, или 1.25 от номинальной.
То есть, вы вполне можете регулировать максимальную скорость в некоторых пределах чисто изменением напряжения аккумуляторной батареи и контроллера.
Есть контроллеры на двойное напряжение — например, на 36/48 вольт, или на 48/60 вольт.

Также важный параметр контроллеров применительно к электродвигателю — это его ампераж, через который может быть установлена максимальная мощность достигаемая мотором, который он питает — например, 36v 17A = ~ 612 watt, 60V 25A =~ 1500w
Дело в том, что указанная на моторколесе «мощность в ваттах» — это скорее рекомендуемая долговременная, при которой он не перегреется, и при которой гарантируется его долгая и счастливая жизнь.
А так-то на 250 ватт мотор можно и 500, и 800 ватт, и даже киловатт подать — понятно, это в долговременной преспективе может не понравится пластиковым шестерёнкам, или фривилу, но считается что двух — трехкратное форсирование большинство моторколёс переносит относительно хорошо.

Впрочем — контроллеры достойны отдельной статейки, по этому в эти дебри сейчас углублятся не будем.

Что ещё важно — усилители дропаутов (torque arm).
В силу того, что рама обычных велосипедов не предназначена на сопротивление оси колёс на скручивание, особенно, в случае алюминиевой вилки / рамы, крайне рекомендуется принимать меры против проворачивания оси мотор-колеса.

Дело в том, что согласно чему-то-там любое действие рождает противодействие.
Мотор-колесо крутит обод, опираясь на ось, то есть ось колеса у неё как точка опоры, которую она при этом пытается провернуть в другую сторону.
Если пазы вилки этот момент не выдерживают, они ломаются, как следствие — колесо уезжает отдельно, велосипед на скорости перьями вилки втыкается в асфальт. К чему это приводит — надеюсь, обьяснять не надо, поломки костей и даже морг в результате — вполне вероятны.

Удачи в электрификации, друзья!
ПС что-то глаза у меня тут недобрые — впервые сам это, на большой картинке, заметил…
но вообще то я белый и пушистый, если рано с утра на работу не надо ехать...:D

Let's block ads! (Why?)

[Перевод] Курс MIT «Безопасность компьютерных систем». Лекция 16: «Атаки через побочный канал», часть 1

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3
Лекция 2: «Контроль хакерских атак» Часть 1 / Часть 2 / Часть 3
Лекция 3: «Переполнение буфера: эксплойты и защита» Часть 1 / Часть 2 / Часть 3
Лекция 4: «Разделение привилегий» Часть 1 / Часть 2 / Часть 3
Лекция 5: «Откуда берутся ошибки систем безопасности» Часть 1 / Часть 2
Лекция 6: «Возможности» Часть 1 / Часть 2 / Часть 3
Лекция 7: «Песочница Native Client» Часть 1 / Часть 2 / Часть 3
Лекция 8: «Модель сетевой безопасности» Часть 1 / Часть 2 / Часть 3
Лекция 9: «Безопасность Web-приложений» Часть 1 / Часть 2 / Часть 3
Лекция 10: «Символьное выполнение» Часть 1 / Часть 2 / Часть 3
Лекция 11: «Язык программирования Ur/Web» Часть 1 / Часть 2 / Часть 3
Лекция 12: «Сетевая безопасность» Часть 1 / Часть 2 / Часть 3
Лекция 13: «Сетевые протоколы» Часть 1 / Часть 2 / Часть 3
Лекция 14: «SSL и HTTPS» Часть 1 / Часть 2 / Часть 3
Лекция 15: «Медицинское программное обеспечение» Часть 1 / Часть 2 / Часть 3
Лекция 16: «Атаки через побочный канал» Часть 1 / Часть 2 / Часть 3

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

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

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

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

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

И вообще, это то, о чём стоить подумать. На лекции в понедельник Кевин также упомянул некоторые интересные побочные каналы, которыми он занимается в своих исследованиях. Но мы собираемся рассмотреть конкретный побочный канал, который изучали Дэвид Брамли и Дэн Бонэ. В своей работе, опубликованной около 10 лет назад, они пишут, что смогли извлечь криптографический ключ веб-сервера Apache путем измерения тайминга разных ответов на различные входные пакеты враждебного клиента. В данном конкретном случае они «охотились» за криптографическим ключом. В действительности, многие атаки через побочный канал нацелены на криптографические ключи отчасти потому, что довольно сложно получить большое количество данных через такой канал. А криптографические ключи — это одна из ситуаций, когда на выходе получается небольшое количество бит, то есть во время атаки злоумышленники могут извлечь около 200 — 256 бит информации. Но основываясь только на этих 200 битах, они способны взломать криптографический ключ этого веб-сервера.

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

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

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

Брамли и Бонэ тщательно исследовали различные детали реализации, чтобы понять, в каких случаях некоторые вещи выполнялись быстрее или медленнее. Так что сначала мы должны узнать, как реализуется криптосистема RSA, а затем вернемся и выясним, как можно атаковать все эти структуры, имеющиеся в RSA.

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

Как правило, есть 3 вещи, о которых вам нужно побеспокоиться – это генерирование ключа, шифрование и расшифровка. В RSA способ создания ключа заключается в выборе 2 больших простых целых чисел, обозначим их p и q. В своей статье эти ребята пишут о p и q каждое размером по 512 бит. Обычно это называется 1024 битным RSA, потому что произведение этих простых чисел — это 1000-битное целое число. В наши дни, это, вероятно, не слишком хороший выбор для размера ключа RSA, потому что его взлом – относительно легкая задача для злоумышленников. Так что если 10 лет назад 1000 бит казались разумной величиной, сегодня при построении системы следует выбрать 2000, 3000 или даже 4000 битный ключ RSA. Так что размер ключа RSA означает размер этих простых чисел.

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

И то, как мы будем шифровать и расшифровывать сообщения, основано на возведении в степень чисел по модулю n. Это кажется немного странным, но мы разберёмся с этим через секунду. Так что если вы хотите зашифровать сообщение m, вы должны преобразовать его в me по mod n. Величина e – это степень, через секунду мы выясним, как её выбирать. Вот таким образом мы собираемся зашифровать сообщение.

То есть мы просто возьмем это сообщение как целое число и возведем его в степень. Через секунду мы посмотрим, почему это работает, а пока что обозначим всё это зашифрованное сообщение литерой С.

Затем, чтобы расшифровать его, мы должны найти другую интересную экспоненту d, которая позволяет взять зашифрованное сообщение C, возвести его в степень d по модулю n и в результате волшебным образом получить расшифрованное сообщение m.

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

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

Если взять Х и возвести его в степень, равную функции φ от n, то это будет равно 1 по модулю n:

X φ(n) = 1 mod n

Эта функция «фи» для нашего конкретного выбора n довольно проста, она равна φ = (p-1)(q-1).
Тогда произведение открытой экспоненты е, которое больше 1, но меньше φ(n), на секретную экспоненту d, будет равно:

ed = ɑφ(n) +1, где ɑ — некая константа.

Таким образом, удаётся правильно расшифровать сообщение, так как существует достаточно простой алгоритм, если вы знаете значение φ(n) для того, чтобы вычислить d с учетом e или e с учетом d.

Аудитория: разве 1 по модулю n не равна 1?

Профессор: да, я здесь допустил неточность, равенство должно выглядеть так:

X φ(n) mod n = 1 mod n, то есть величина Х в степени функции «фи» от n по модулю n равна единице по модулю n.

В основном это означает, что для RSA мы должны выбрать некоторое значение е, которое будет нашим значением шифрования. Затем из e мы собираемся сгенерировать d на основе формулы d.e = 1 mod φ(n), отсюда d = 1/e mod φ(n).

Есть некоторые Эвклидовы алгоритмы, которые вы можете эффективно использовать для этого вычисления. Но для того, чтобы сделать это, вы должны знать эту φ(n), которая требует факторизации, то есть разложения нашего числа n на множители p и q.

Итак, RSA является системой, где открытый ключ — это пара: экспонента шифрования е и число n, а пара d и n – это закрытый ключ, который держится в секрете. Так что любой может возвести сообщение в степень, чтобы зашифровать его для вас. Но только вы знаете это значение d и поэтому сможете расшифровать сообщение. И до тех пор, пока вы не знаете факторизацию этих множителей P и Q, или N, равное произведению P и Q, вы не знаете, что собой представляет φ = (p-1)(q-1).

В результате вычислить это значение d — достаточно трудная задача. Вот что в общих чертах представляет собой алгоритм RSA на высоком уровне.

Теперь, когда мы ознакомились с принципами RSA, я хочу остановиться на 2-х вещах. Есть хитрости, как правильно его использовать и есть подводные камни, возникающие при его использовании. Существуют множество способов, как реализовать код для этого возведения в степень и делать это эффективно. Это довольно незаурядная задача, потому мы имеем дело 1000-битными целыми числами, для которых нельзя просто выполнить инструкцию умножения. Вероятно, потребуется много времени, чтобы сделать эти операции.

Поэтому первое, что я хочу упомянуть, — это различные подводные камни RSA. Один из них — это мультипликативность. Предположим, у нас есть 2 сообщения: m0 и m1. Я зашифрую их, превратив m0 в m0e mod n, а m1 в m1e mod n. Возможной проблемой, вернее, не обязательно проблемой, но неприятным сюрпризом для того, кто использует RSA, будет то, что очень легко произвести шифрование произведения m0 на m1, потому что вы просто умножаете эти 2 цифры: m0e mod n * m1e mod n.

Если вы их умножите, то в результате получите произведение (m0m1)e по модулю n. Это корректное шифрование при упрощенном использовании RSA для значения m0m1. На данный момент это не большая проблема, потому что вы просто можете создать это зашифрованное сообщение, но не в состоянии его расшифровать. Однако существует возможность, что общая система позволит вам расшифровать определенные сообщения. То есть если она позволяет вам расшифровать созданное вами сообщение, то возможно, следуя обратным путём, вы сможете узнать, что собой представляют эти сообщения m0 и m1.

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

Второй подводный камень, или свойство RSA, на которое стоит обратить внимание – это детерминированность, или определяемость. В описанной ранее элементарной реализации, если вы берете сообщение m и шифруете его, превращая в me mod n, то это детерминированная функция сообщения. Поэтому, если вы зашифруете его снова, вы получите точно такое же шифрование.

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

Тогда я зашифрую его и посмотрю, получите ли вы тот же зашифрованный текст. И если это так, то я узнаю, что вы зашифровали. Потому что все, что мне нужно для шифрования сообщения — это общедоступный открытый ключ, который представляет собой пару чисел (n,e).

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

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

(f(m))e mod n.

Эта функция f, обычно используемая в наши дни, называется OAEP — Оптимальным Ассиметричным Шифрованием с Дополнением. Это нечто закодированное, обладающее двумя интересными свойствами.

Во-первых, оно привносит случайность. Вы можете думать о f(m) как о генерации 1000-битного сообщения, которое вы собираетесь зашифровать. Частью этого сообщения будет ваше сообщение m здесь, в середине этого прямоугольника. Конечно, вы сможете получить его обратно при расшифровке. Итак, есть 2 интересные вещи, которые вы хотите сделать: справа вы размещаете некую случайность, значение r. Оно даёт то, что если вы зашифруете сообщение несколько раз, то каждый раз будете получать разные результаты, так что шифрование больше не будет детерминировано.

Для того, чтобы превозмочь это мультипликативное свойство и другие виды проблем, слева вы располагаете некое дополнение pad, которое представляет собой последовательность типа 1 0 1 0 1 0. Можно выбрать последовательность и получше, но грубо говоря, это какая-то предсказуемая последовательность, которую вы вставляете сюда и всякий раз, когда вы расшифровываете сообщение, вы убеждаетесь, что эта последовательность все еще там. Мультипликативность уничтожит эти биты pad, и тогда вам будет ясно, что кто-то испортил ваше сообщение и отбросил его. Если же эти биты остаются на месте, это доказывает, что никто не подделал ваше сообщение и вы в состоянии принять его, так как оно было правильно кем-то зашифровано.

Аудитория: если злоумышленник знает, насколько велико значение pad, не может ли он установить 1 в самый низ последовательности, а затем мультиплицировать это значение?

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

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

Однако рассмотренные выше детали будут иметь для нас значение, так как мы на самом деле пытаемся выяснить, как сломать или как атаковать существующую реализацию RSA.

В частности, атака, описанная в лекционной статье, будет использовать тот факт, что сервер собирается проверить это дополнение pading, когда он получит сообщение. Так вот как мы собираемся рассмотреть время, которое потребуется серверу для расшифровки. Мы собираемся отправить тщательно построенное сообщение, но оно не создано из реального сообщения m и его шифрования. Мы собираемся создать тщательное зашифрованное целочисленное значение.

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

Итак, теперь давайте поговорим о том, как нам реализовать RSA. Суть реализации заключается в возведении в степень, что довольно нетривиально, как я упоминал ранее, потому что все это очень большие целые числа. Само сообщение, по крайней мере, в этой статье, представляет собой 1000 разрядное целое число. И сама экспонента e также будет иметь довольно большое значение.

По крайней мере, экспонента шифрования хорошо известна. Но лучше, чтобы экспонента расшифровки была большим числом также порядка 1000 бит. Так что у вас есть 1000-битное целое число, которое вы хотите возвести в 1000 битную целую степень по модулю ещё одного 1000 битного целого числа n, что будет довольно трудоёмко. Поэтому практически в каждой реализации RSA предусмотрена оптимизация, позволяющая сделать этот процесс немного быстрее.
Есть 4 основных оптимизации, которые имеют значение для этой атаки. На самом деле их больше, но самыми важными являются следующие. Первая называется китайской теоремой об остатках, или CRT. Просто вспомните её из курса средней или высшей школы. Она утверждает следующее. Предположим, что у вас есть два числа, у вас имеется некоторое значение Х, и вы знаете, что [Х = a1] mod p и одновременно [Х = a2] mod q, где р и q – простые числа, и это модульное равенство применимо ко всему уравнению.

Выясняется, что у этой системы уравнений есть уникальное решение [Х = Х1] mod pq. Существует такая уникальная величина Х1, которую на самом деле можно очень эффективно вычислить. Китайская теорема об остатках снабжена алгоритмом вычисления этого уникального простого числа Х1, которое равно Х mod pq при значениях соответственно a1 и a2 mod p и q.

Хорошо, так как можно использовать эту китайскую теорему об остатках для ускорения модульного возведение в степень? Нам поможет то, что если вы заметили, мы делаем вычисление некоторой связки вещей по модулю n, который равен p умноженному на q.

Китайская теорема об остатках говорит, что если вы хотите узнать значение mod pq, достаточно вычислить значение mod p и значение mod q. После этого китайская теорема об остатках используется для того, чтобы найти единственно верное решение того, что такое mod pq. Как вы думаете, почему это быстрее? Ведь похоже, что вы делаете одно и то же дважды, а это больше работы по рекомбинации?

Аудитория: вероятно, эти значения достаточны малы и позволяют провести вычисление быстрее?

Профессор: ну, они конечно меньше, но не настолько, чтобы это оказало существенное влияние. Итак, произведение p и q, или число n составляет около 1000 бит, p и q оба по 500 бит, но они всё ещё не похожи на размер машинного слова. Но это нам поможет, потому что большая часть того, что мы делаем в этих вычислениях — это умножение, и оно примерно равно квадрату тех вещей, которые вы умножаете. Вспомните метод умножения из курса высшей школы — вы берете все цифры одного числа и умножаете их на все остальные цифры в другом числе. Как следствие, умножение, возведение в степень на выходе выдаёт примерно квадратичный размер исходного числа. Так что если мы по существу идем от 1000 битов до 512 битов, то мы уменьшаем размер входных данных в 2 раза. Это означает, что все возведение в степень будет примерно в 4 раза проще. Так что если мы просчитаем эти выражения [Х = a1] mod p и [Х = a2] mod q дважды, мы ускорим процесс вычисления в 4 раза. Так что в итоге применение китайской теоремы об остатках даёт повышение производительности в 2 раза при выполнении любой операции RSA как при шифровании, так и при дешифровке.

Это первая оптимизация, которую использует большинство людей.

Вторая оптимизация основана на технике, которая носит название Sliding windows, «скользящие окна». Мы рассмотрим два этапа этой оптимизации. Сначала рассмотрим, с помощью каких основных операций выполняется это возведение в степень.

Предположим, у вас есть какой-то зашифрованный текст С, который теперь составляет 500 бит, потому что вы не делали mod p или mod q, и примерно такого же размера d. Так как же возвести c в степень d? Я думаю, что глупо просто взять c и перемножить её саму на себя d раз. Но экспонента d очень большая, около 500, так что это никогда не закончится. Более эффективный план состоит в том, чтобы сделать то, что называется повторением квадрирования. Это шаг, который нужно совершить перед «скользящими окнами». Технически повторение квадрирования выглядит так.

Если вы хотите вычислить c2x, то вы можете вычислить С в степени Х и затем возвести его в квадрат: (cx)2:

c2x = (cx)2

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

c2x+1 = (cx)2 x с

Это и называется повторением квадрирования.

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

В чём же заключается трюк со «скользящими окнами», о которых пишет лекционная статья? Он немного изощрённей, чем повторение квадрирования. В любом случае, возведение в квадрат является неизбежным, но оптимизация методом «скользящих окон» позволяет уменьшить накладные расходы умножения на это дополнительное значение с в конце формулы c2x+1 = (cx)2 x с.

Предположим, что у вас есть некоторое число, которое имеет несколько единичных бит в экспоненте, каждый единичный бит – бинарное представление, и вам придётся выполнить этот шаг c2x+1 вместо шага c2x, потому что для каждого нечетного числа вам придется умножить на c. Ребятам, чью статью мы обсуждаем, не хотелось производить это умножение на с слишком часто. Поэтому их план состоял в том, чтобы предварительно вычислять различные степени с.

Они создали своего рода таблицу, где располагались такие значения:

с1
с3
с7

с31

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

Например, если у вас имеется выражение с32x+y, то сначала вы можете выполнить возведение с в квадрат 5 раз, чтобы получить с в 32-й степени, а затем умножить полученное значение на сy.

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

29:00 мин

Курс MIT «Безопасность компьютерных систем». Лекция 16: «Атаки через побочный канал», часть 2


Полная версия курса доступна здесь.

Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до декабря бесплатно при оплате на срок от полугода, заказать можно тут.

Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?

Let's block ads! (Why?)

От Alibaba до «Пятерочки»: кто и как использует систему распознавания лиц в бизнесе

Провайдер AT&T стал крупнейшим правообладателем и начнет отключать от сети обвиненных в пиратстве пользователей

Провайдер AT&T планирует расторгнуть соглашения об обслуживании с пользователями, которых обвинили в незаконном распространеннии контента в интернете. Об этом со ссылкой на «знакомых с ситуацией людей» сообщает интернет-издание Axios.

Активизацию в борьбе с пиратством журналисты связывают с состоявшейся летом 2018 года сделкой по покупке AT&T контент-сети Time Warner за $85 млрд.

Что случилось


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

В заявлении для прессы компания AT&T подтвердила, что получила сообщения от владельцев прав на различные произведения о том, что пользователи провайдера в нарушение закона распространяют материалы без разрешения.

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

Скриншот раздела с советами о прекращении нарушения копирайта из сообщений, которые получают пользователи AT&T

В чем причина «закручивания гаек»


Одной из причин того, что AT&T впервые в своей истории готова расторгать договоры с клиентами из-за обвинений в пиратстве, может быть тот факт, что с недавних пор компания сама владеет крупнейшей сетью производства контента. Летом 2018 года провайдер приобрел телекомпанию Time Warner за $85 млрд.

Объединенная компания называется WarnerMedia. Именно такие организации обычно и пишут претензии интернет-провайдерам.

Некоторые наблюдатели считают, что теперь AT&T будет куда активнее бороться с пиратством и использовать свое положение в том числе для конкуренции с другими телекоммуникационными компаниями. Так недавно пользователи провайдера DISH Networks на короткое время потеряли возможность пользоваться интернет-сервисами телеканала HBO, который входил в Time Warner и теперь принадлежит AT&T.

Руководство DISH обвинило AT&T в намеренном срыве переговоров по продлению контракта с HBO. Причиной такого поведения могло стать желание переманить подписчиков услуги платного телевидения Dish.

Другие материалы по теме финансов и фондового рынка от ITI Capital:


Let's block ads! (Why?)