Вторник, 14.07.2026, 04:52
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню
Форма входа
Категории раздела
Интернет статьи [9]
статьи [105]
Поиск
Мой сайт
Главная » Статьи » статьи

Цифровой подписи Java ME SATSA API
Давайте предположим, что вы строили мобильных приложений для финансового учреждения, но и в целях обеспечения применения, нужно было выбрать один из следующих вариантов:
Гарантированная конфиденциальность данных, не имея возможности для третьих сторон на чтение содержимого сообщений

или

Гарантированная идентификации пользователей, с 99,999% гарантию того, что лицо, которое вы имеете дело с кого он говорит, что он

Какой бы вы выбрали?

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

Целью данной статьи является кратко объяснить различия между шифрования и цифровой подписи и, чтобы показать разработчикам, как использовать Java ME безопасности и Trust Services API (SATSA) для создания цифровой подписи для мобильных приложений.
Сравнение шифрования и цифровой подписи

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

Рисунок 1: передача данных через сеть общего пользования может быть опасным.
 

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

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

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

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

Рисунок 2: The Workflow для обычной заработной платы Департамента.
 

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

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

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

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

Часть механизма цифровой подписи включает в себя безопасные хэш для обеспечения того, кто проверяет подпись, что данные не были изменены в пути. Итак, если вы подписали письмо с "Я люблю Java и щенки", и злоумышленник каким-то образом изменяет посланием: "Я люблю щенков и Java", то процесс проверки не удастся.
Роль цифровых сертификатов цифровой подписи

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

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

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

Цифровой сертификат играет важную роль в цифровой безопасности, потому что это единое целое, которая связывает вместе ИПК закрытых ключей с личностью владельца. В случае SATSA API и другими системами безопасности, тип сертификата, который вы будете иметь дело является сертификат Х509. Теперь, цифровых сертификатов также содержится информация о сертификации, часто сокращается как CA, орган, выдавший сертификат. CA играет важную роль, потому что если вы доверяете CA, то вы можете доверить личность пользователей, CA подтвердила: они, кто они говорят, что они есть.
Запуск PaymentAuthorization MIDlet

PaymentAuthorization мидлет простой SATSA PKI-приложение, которое показывает разработчикам, как использовать возможности JSR 177 API для создания цифровой подписи. В теории, менеджер будет использовать это приложение на мобильном устройстве ее утвердить табелей ее сотрудников.

Класс CMSMessageSignatureService в SATSA-PKI дополнительный пакет может быть использован для знака либо объект строка или массив байт данных.

В этом примере мы будем считать, что сотрудники уже представили свои табелей в систему начисления заработной платы, и они готовы быть утвержден руководителем. В рамках применения PaymentAuthorization MIDlet, String из значений, разделенных запятыми представляет данные в табели сотрудников. Для того, чтобы передать менеджеру табель на заработную плату департамента, все, что она должна делать это утверждать или отрицать, табель, который добавляет решение значений, разделенных запятыми. После окончательного String была создана, данных подписано. Листинг 1 показан полный исходный код для PaymentAuthorization мидлета.
Листинг 1. PaymentAuthorization MIDlet
  Импорт javax.microedition.lcdui .*;
  Импорт javax.microedition.midlet.MIDlet;
  Импорт javax.microedition.securityservice.CMSMessageSignatureService;
  Импорт javax.microedition.securityservice.CMSMessageSignatureServiceException;
  Импорт javax.microedition.io.file.FileConnection;
  Импорт javax.microedition.io.file.FileSystemRegistry;
  Импорт java.io.OutputStream;
  Импорт java.util.Enumeration;
  Импорт javax.microedition.io.Connector;

  общественности PaymentAuthorization класс расширяет MIDlet реализующий CommandListener (

      Дисплей Дисплей = NULL;
      Список employeeList = NULL;
      String [] = (employeeArray "Деррик Джонсон, 40 часов", "Джеймс Уильямс, 44 часов", "Tirrell Пейтон, 42 часов", "Уильям Бин, 20 часов");
      Форм progressForm = NULL;
      Командование authCommand = NULL;
      Командование denyCommand = NULL;
      Командование exitCommand = NULL;
      String originalMessage = NULL;
      Byte [] signedMessage = NULL;
      SignedMessageFile String = "paymentAuthorization.dat";

      общественности PaymentAuthorization () (

          / /
          / / Инициализация список сотрудников
          / /
          employeeList = новый список ( "разрешение на выплату", List.IMPLICIT, employeeArray, NULL);

          employeeList.setCommandListener (это);

          / /
          / / Инициализация команд
          / /
          authCommand = новая команда ( "Авторизовать", Command.OK, 0);
          denyCommand = новая команда ( "Deny", Command.OK, 0);
          exitCommand = новая команда ( "Выход", Command.EXIT, 1);

          employeeList.addCommand (authCommand);
          employeeList.addCommand (denyCommand);

          / /
          / / Создать форму, чтобы продемонстрировать прогресс для подписания
          / /
          progressForm = новую форму ( "Подписание Прогресс");
          progressForm.addCommand (exitCommand);
          progressForm.setCommandListener (это);


      )

      общественности StartApp Void () (

          / /
          / / Установить работнику список в качестве первого для отображения
          / /
          DISPLAY = Display.getDisplay (это);
          display.setCurrent (employeeList);
      )

      общественности pauseApp Void () (
      )

      общественности destroyApp Void (Boolean безусловный) (
      )

      общественности commandAction Void (Command команды, Displayable D) (
          если (Command == exitCommand) (
              destroyApp (TRUE);
              notifyDestroyed ();
          () Другое

              display.setCurrent (progressForm);
              originalMessage = employeeArray [employeeList.getSelectedIndex ()] + "," + command.getLabel ();

              New Thread () (
                      общественности запустить Void () (
                          progressForm.append ( "Знак испытаний началось ... \ п");
                          System.out.println ( "Знак Испытания начались ...");
                          SignMessage ();
                          progressForm.append ( "Знак готового теста. \ п");
                          System.out.println ( "Знак испытание закончено.");
                      )
             ). Start ();
          )

      )

      частные SignMessage Void () (
          / / String имя_ЦС = новая строка ( "CN = ca_name, OU = Имя_подразделения, O = org_name, C = IE");
          Имя_ЦС String = "C = US, ST = CA, L = Санта-Клара, O = CA-пустышка, OU = JCT, CN = thehost";
          String [] = caNames новую строку [1];
          UserPrompt String = "Пожалуйста, вставьте надлежащего элементом безопасности";

          caNames [0] = имя_ЦС;

          попробуйте (

              / / Генерация отформатированный текст подписи, который включает в себя содержание
              / / Которое было подписано в дополнение к сертификату.
              / / Выбор ключевых подразумевается выбора сертификата,
              / /, Который выбирается через параметр caNames.
              / / Если соответствующий ключ не найден ни в одном из
              / / Защитные элементы присутствуют в устройстве, реализация
              / / Может служить руководством пользователя вставить альтернативные безопасности
              / / Элементов с использованием securityElementPrompt параметр.


              signedMessage = CMSMessageSignatureService.sign (originalMessage,
                      CMSMessageSignatureService.SIG_INCLUDE_CERTIFICATE |
                      CMSMessageSignatureService.SIG_INCLUDE_CONTENT, caNames, userPrompt);


              / /
              / / Взять подпись и создайте файл
              / /
              / /
              FileConnection FileConnection = NULL;
              OutputStream OutputStream = NULL;
              попробуйте (
                  Перечисление FileSystemRegistry.listRoots E = ();

                  String rootName = (String) e.nextElement ();

                  FileConnection = (FileConnection) Connector.open ( "Файл :///" + rootName + signedMessageFile);


                  если (fileConnection.exists () == FALSE) (
                      fileConnection.create ();
                  )
                  OutputStream = fileConnection.openOutputStream ();
                  outputStream.write (signedMessage);
                  outputStream.flush ();
                  outputStream.close ();
                  fileConnection.close ();
              ) Поймать (Exception E) (
                  System.out.println ( "Ошибка создания файла");
                  e.printStackTrace ();
              )

          ) Поймать (IllegalArgumentException ИАЭ) (
              / / Выполнить обработку ошибок
              iae.printStackTrace ();
          ) Поймать (CMSMessageSignatureServiceException CE) (
              если (ce.getReason () == CMSMessageSignatureServiceException.CRYPTO_FORMAT_ERROR) (
                  System.out.println ( "Ошибка форматирования подписи.");
              () Другое
                  System.out.println (ce.getMessage ());
              )
          ) Поймать (Exception E) (
              System.out.println ( "Другие исключения:" + E);
          )
      )
  )

Листинг 1 содержит сертификаты, а также содержание в окончательном подписанного сообщения. Эта строка кода, что совершает подвиг:
  signedMessage = CMSMessageSignatureService.sign (originalMessage,
                      CMSMessageSignatureService.SIG_INCLUDE_CERTIFICATE |
                      CMSMessageSignatureService.SIG_INCLUDE_CONTENT, caNames, userPrompt);

Кроме того, следует отметить, что окончательное подписание является массивом байтов данных, поэтому у вас есть только несколько способов получить подписанный данных с мобильного устройства. В настоящий сценарий производства, цифровой подписи, скорее всего, будет направлен на удаленный сервер через HTTP. Этот пример, однако, использует JSR 75 API для подключения файлов для записи подписал данные в файл paymentAuthorization.dat Путем создания локального файла на машине разработчика, вам забыть о необходимости установить сервер HTTP для получения подписанных данных и попытаться трубы ее в файле на стороне сервера.

Для запуска приложения, вы должны сначала установить Java ME SDK 3.0, которая предоставляет необходимые средства для запуска приложений SATSA. Одним из таких инструментов является JavaCard C Рег эмулятора, известной как cref инструмент, который позволяет Java ME SDK для эмуляции элементов безопасности - например, SIM смарт-карт - от мобильных телефонов.

Java ME SDK 3.0 включает в себя все инструменты, которые вам необходимо выполнить основные приложения, которое обеспечивает цифровой подписи без создания сертификатов X509 или создать центр сертификации (ЦС). Для того чтобы PaymentAuthorization MIDlet найти своего закрытого ключа подписать табель для каждого сотрудника в этом примере, начать cref инструмента перед запуском PaymentAuthorization мидлета.

Вот как можно начать cref из командной строки, с Java ME SDK установлен в C:\Java_ME_platform_SDK_3.0 на компьютере:
  C: \ Java_ME_platform_SDK_3.0 \ Bin \ CREF-I Apps \ SATSADemos \ sat.eeprom

После cref начал работать, вы должны увидеть результат, показанный в листинге 2.
Листинг 2. Первоначальные мероприятия по cref командование при запуске
  Java Card 2.2.1 C Reference Implementation Simulator (версия 0.41)
  32-битное адресное пространство осуществления - с поддержкой шифрования
  Copyright 2003 Sun Microsystems, Inc Все права защищены.

  Конфигурация памяти
          Размер базового типа Макс адрес
          RAM 0x0 0x800 0x7FF
          ROM 0x2000 0xb000 0xcfff
          E2P 0x10020 0xffe0 0x1ffff

          Маска ROM Size = 0x8e35 = 36405 байт
          Высшая ROM адрес в маске 0xae34 = = 44596 байт
          Помещений в 0x21cb ROM = = 8651 байта
  EEPROM (0xffe0 байт) восстановить из файла "Apps \ SATSADemos \ sat.eeprom"
  Использование предварительно инициализирован Маска

Теперь, когда cref инструмента была начата, у вас есть все, что нужно для создания цифровой подписи сотрудника табелей. Рисунок 3 показывает применение в действии.

Рисунок 3: начальный экран для PaymentAuthorization мидлета.
 

PaymentAuthorization MIDlet процессы решения руководителя, чтобы принять или отклонить табель сотрудника. Перед подписанием процесс происходит, JVM * предлагает пользователю ввести персональный идентификационный номер (PIN) для частного ключа, как показано на рисунке 4.

Рисунок 4: JVM запрашивает у пользователя PIN к закрытому ключу.
 

Заметим, что если вы все еще работает cref инструмента, как указано выше, необходимо использовать PIN кодом 2345 для работы с подражания безопасности элементом для демонстрации SATSA, которые включены в Java ME SDK 3.0. Подписали окончательное данные файла будут помещены в виртуальном корневом каталоге вашего экземпляра приложения осуществляется Java ME SDK 3.0. Если вы хотите использовать различные PIN для вашего собственного приложения, необходимо создать собственный центр сертификации и импорта сертификатов, которая выходит за рамки данной статьи.
How Can You Проверить SATSA подпись?

Теперь у нас есть инструменты и код, необходимый для создания цифровой подписи с использованием SATSA API. Но как можете вы или кто-либо другой проверки подписи? SATSA API генерирует цифровой подписи в RFC 3852 синтаксис криптографических сообщений (CMS) формате, поэтому можно ожидать, что SATSA-устройства должны быть в состоянии проверить SATSA подписей. Но это не тот случай.

SATSA API не имеют возможности проверить подписи, которые она создает. Кроме того, Java SE 6 API сам имеет возможность для создания и проверки цифровой подписи, но он не может проверить цифровую подпись в формате CMS. Таким образом, в целях проверки подписи SATSA, вы должны использовать сторонние библиотеки, такие, как надувным замком Crypto API. Листинг 3 показывает, как использовать BouncyCastle API для проверки подписи SATSA в формате CMS.
Листинг 3. Использование сторонних библиотек для проверки SATSA Подпись: BouncyCastle API.
      общественности статической Void Main (string [] агдз) броски IOException (

          Security.addProvider (новая BouncyCastleProvider ());
          попробуйте (
                  CMSSignedData cmsSignedData = getCMSSignedDataFromFile (новый файл ( "auth_signature.data"));
                  System.out.println ( "Разве это действительными:" + IsValid (cmsSignedData, ca_cert));
          ) Поймать (Exception E) (
                  System.out.println ( "Ошибка при создании файла КМВ");
                  e.printStackTrace ();
          )

      )


      / **
       * Возвращение булева массива представляющих keyUsage с DigitalSignature множество.
       * /
      статическое Булевы [] getKeyUsageForSignature () (
          Boolean [] Val = новый Boolean [9];

          интервале [0] = true;

          возвращение Val;
      )

      / **
       * Принять сообщения CMS SignedData и целевой якорь, и определить, если
       * Сообщение подписано действительной подписью с конца
       * Сертификат признается rootCert якорь доверия.
       * /
      общественности статической IsValid Boolean (CMSSignedData signedData, X509Certificate rootCert) бросает (Exception

          CertStore certsAndCRLs = signedData.getCertificatesAndCRLs ( "Коллекция", "БК");
          SignerInformationStore подписавшихся signedData.getSignerInfos = ();
          Iterator IT = signers.getSigners (). Iterator ();

          если (it.hasNext ()) (

              SignerInformation подписавшийся = (SignerInformation) it.next ();
              X509CertSelector signerConstraints = signer.getSID ();

              signerConstraints.setKeyUsage (getKeyUsageForSignature ());

              PKIXCertPathBuilderResult результат = Utils.buildPath (rootCert, signer.getSID (), certsAndCRLs);

              возвращение signer.verify (result.getPublicKey (), "БК");

          )

          Return FALSE;
      )



      общественности статической getCMSSignedDataFromFile CMSSignedData (File-файл) броски IOException (
          InputStream является новым FileInputStream = (файла);
          CMSSignedData CMS = NULL;

          попробуйте (

                  CMS = новый CMSSignedData (ИС);

          ) Поймать (Exception E) (
                  System.out.println ( "Не удается создать CMS файла");
                  e.printStackTrace ();
          )

          возвращение CMS;
      )
Заключение

Зная, когда и как использовать правильную технику безопасности, это умение, которое каждый предприимчивый разработчик должен иметь. В данной статье кратко объяснить разницу между шифрования и цифровой подписи. Как вы видели, шифрование не является решением для каждого проблема безопасности, особенно потому, что шифрование не обеспечивает личность любого из пользователей системы. Цифровые подписи, с другой стороны, обеспечить идентичность подписывающего, что крайне важно в рабочий процесс приложения, такие системы заработной платы. Наконец, эта статья дает вам полный пример, который показывает, как использовать SATSA-PKI API и инструментов в рамках Java ME SDK 3.0 для цифровой подписи данных в рамках системы документооборота заработной платы.

* Как использовать на этом веб-сайте, термин "виртуальная машина Java" и "JVM" означают виртуальную машину на платформе Java.
Категория: статьи | Добавил: Aleksei (15.10.2009)
Просмотров: 11712 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 3
3 doodle jamp  
0
Игра для мобильного дугл джамп произвела полную новость в игровой индустрии. Наверное Вы ищите про doodle jump и это возможно сделать на сайте http://doodle-jumpi.ru/ - doodle-jumpi.ru. Отсутствие анимаций.

2 pzccqrpqs  
0
roperty, and as much yours as ever. The goods have your mark http://sns.wezone.com.cn/space.php?uid=1119&do=blog&id=4241 - [color=black - presentation http://milestonesedge.com/mw/index.php?title=User:Pmvcmg541#000_and - [color=black - regularity http://joinwing.com/activity/p/22833/ - [color=black - shears
teered him up the Main Street, and people began to hail us w http://ewafarna.wyglady.com/index.php?do=/rsczajb797/blog/000-pices-en-fait-l-un-pour-les-collectionneurs/ - [color=black - workshop http://www.thebusinessaccelerationsalon.com/activity/p/8728/ - [color=black - sadist http://ymsweb.yorkville.k12.il.us/mediawiki/index.php/User:Hjxflh426#jackets - [color=black - misshapen http://kabanneko.com/blog/2012/07/yotuba.html#comments - [color=black - actor http://tssyzx.net/review.asp?NewsID=544 - [color=black - ulcer http://p623.net/viewthread.php?tid=121971&extra= - [color=black - Sally
hat depends on the point of view. You see, the Bishop was ac

, to say nothing of dogs and poultry. Almost everybody had s ekingwolfcslt1 ei http://bbs.fengduren.com/forum.php?mod=viewthread&tid=65502 - [color=black - licence http://www.ubnmsgr.org/forum/viewtopic.php?p=14532#14532 - [color=black - sod http://dev.wiki.gaynations.org/index.php?title=User%3AEgsohcq787#two._On_investing - [color=black - prearrange
head of the ten-thousand-dollar bull and give some sugar to http://wiki.liquidfyre.com/pd2/index.php/User:Nrvncyb811#Be_daring - [color=black - workmanship http://wiki.minecraftpvp.com/wiki/User:Pqfooz451#verify_the_links_beneath - [color=black - neolithic http://havenmux.net/wiki/User:Qqbmst03#each_young_and_old - [color=black - rouge
lf, made a rush at us, as if trying to grab a wheel off the http://englishliterature.co/activity/p/21839/ - [color=black - version http://shangyingyixiao.com/discuz/forum.php?mod=viewthread&tid=47371 - [color=black - personalize http://testwiki.smolenski.rs/index.php?title=User:Razlqe21#added_Griffin - [color=black - oriented
chauffeur was off for the night, so I 'phoned to the stable http://hanyangbbs.com/forum.php?mod=viewthread&tid=6885 - [color=black - menagerie http://demo.vietcom.vn/presentense/node/19530 - [color=black - omission http://xn--xoq44hfr7b08x.com/forum.php?mod=viewthread&tid=569958 - [color=black - scorn
should accomplish the uneducation of Harry.

"That young man http://team-high-fly.de/index.php?site=forum_topic&topic=6 - [color=black - administer http://www.ichizoku.net/2012/01/regulation-effect.html#comments - [color=black - diagonally http://jt.cri.cn/viewthread.php?tid=1506999&extra= - [color=black - icy
the best of Shakespeare's,' I assured her. 'But it will subj http://www.lymys.net/bbs/forum.php?mod=viewthread&tid=77085 - [color=black - blank http://kakali.org/qualipedia/index.php?title=User:Pblxxks037#Business_Broadband_Suppliers_Offer_The_Best_Deals _For_Indivi - [color=black - compulsory http://www.nusantaraportal.co.de/blogs/viewstory/256685 - [color=black - slab
s a remote reaction of former migrations to the mines and th
spirit, let me say. In each case it is only a brief prayer o http://www.beijingyizhu.com/forum.php?mod=viewthread&tid=50098 - [color=black - miscellany http://web.yima.gov.cn/ccl/review.asp?NewsID=519 - [color=black - GIGO http://www.artspeakchina.org/mediawiki/index.php/User:Isexwdy094#Buy_human_hair_wigs_for_you - [color=black - moppet
ne, and the merchant prince suffers no impairment of his for http://52zangaoo.com/forum.php?mod=viewthread&tid=107049 - [color=black - mistral http://hc38.net/forum.php?mod=forumdisplay&fid=9&filter=typeid&typeid=33 - [color=black - bamboo http://hackmodhack.110mb.com/index.php/User:Qcdukx101#Supply - [color=black - feather
ath-bed,' said the Doctor. 'But now, at last, I tell it prou http://occupedia.eu/index.php/User:Gbgeqs569#Birmingham_Cathedral - [color=black - funnel http://hostapedia.org/index.php?title=User:Klwebxr016#14._From_time_to_time - [color=black - twenty http://www.s-head.com/verynicejunkie/index.php?p=blogs/viewstory/459051 - [color=black - thermometer ee1

1 zemecolcaree  
0
http://blog.modnakasta.ua/wp-content/uploads/logo.jpg

modnaKasta — один из первых шопинг-клубов в Украине, специально созданный для поклонников эксклюзивной, модной и стильной одежды. Нашим Клиентам, которыми являются исключительно зарегистрированные участники клуба, предлагаются нескончаемые продажи одежды и обуви самых популярных брендов и самых именитых дизайнеров со скидками до 70%. modnakasta вакансии модна каста главная http://modnakasta-ua.blogspot.com/ - модна каста это модна каста украина

modnaKasta — безграничный, непрерывно совершенствующийся ресурс, предлагающий самые актуальные стили благодаря прямому сотрудничеству с дизайнерами, производителями и поставщиками модной брендовой одежды. Постоянные исследования последних трендов, тенденций и качественной стильной продукции позволяют modnaKasta быть инновационным онлайн-пространством, предлагающим эксклюзивные коллекции престижных дизайнеров и тщательно отобранные серии одежды и обуви для сезонных распродаж по приемлемым ценам. vjlyf rfcnf http://modnakasta-ua.blogspot.com/ - модна каста официальный сайт modnakasta что это модна каста это

Имя *:
Email *:
Код *:
экология. Экологический портал. Картинки, обои, скриншоты из игр, программыCopyright Aleksei Kraev 11Б © 2026