| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java Card > Зачем этот раздел |
| Автор: v2v 16.1.2008, 23:33 | ||
| наверное моя тема будет первой в этом разделе. Итак мой вопрос к создателям : "Зачем этот раздел?" Добавлено через 3 минуты и 27 секунд Добавлено сам на него и отвечу
http://citforum.univ.kiev.ua/hardware/articles/jcard.shtml |
| Автор: Kangaroo 16.1.2008, 23:51 |
Что-то я не разу не видел вопроса по этой теме на форуме... |
| Автор: v2v 17.1.2008, 00:03 |
| плохо искал! один есть http://forum.vingrad.ru/forum/topic-17924/unread-1/hl/javacard/index.html |
| Автор: Samotnik 17.1.2008, 00:46 |
+1 !!! |
| Автор: Alexandr87 17.1.2008, 08:31 |
| ИМХО, раздел нужен. |
| Автор: v2v 17.1.2008, 09:25 |
| его надо было назвать "Java Безопасность" тогда можно было бы перенести в него всё jsse. |
| Автор: javastic 17.1.2008, 10:59 |
| Всё очень просто. Появились люди которым эта тема интересна, а в рунете особо форумов нормальных нет по Джава Карду. Так что мы будем первыми. Готовится несколько статей и материалов. |
| Автор: Samotnik 17.1.2008, 12:46 |
| Kangaroo, Ага, хоть что - то пояснили, уже клева! |
| Автор: Alexandr87 17.1.2008, 19:23 | ||
+1 имхо, слишком специфичный раздел. Боюсь, что новые темы будут появляться очень редко. |
| Автор: AntonSaburov 18.1.2008, 12:36 |
| Я почитал про Java Card - вообщем думаю, что можно попробовать отдельный раздел вытянуть. Он конечно достаточно специфический, но я очень подозреваю, что на самом деле он может быть ничуть не хуже чем J2ME. Начал готовить материал кое-какой. Хотелось бы посоветоваться с теми, кто тоже готовит материал - что они собираются делать. Я честно собрался вольно переводить кое-какой материал с официального сайта Sun Microsystems. Дальше посмотрим. Так что будем раскручиваться. Может кто и заинтересуется и раздел начнет расти. |
| Автор: nornad 18.1.2008, 12:41 | ||
И где ж тут три части? Копипаст рулит Ура! Наконец-то сишникам радость - теперь можно будет удалить созданный объект вручную и со стопроцентным успехом. Хотя бы в Java Card Добавлено через 3 минуты и 15 секунд Ну, лично мне интересно. Только вот сферы реального приложения пока нет. Если кроме статей появится инфа о том, как в домашних условиях енто дело опробовать - будет антереснее. А так... так у нас пока не слышал, чтобы требовалось что-то подобное. Ну, правда, у нас и не мегаполис. |
| Автор: AntonSaburov 18.1.2008, 12:57 | ||
Ну ошибся, бывает. Но там действительно три части - забыли про Java Card Runtime Environment. Добавлено через 2 минуты и 2 секунды
Мне тоже это интересно стало. Кстати в Питере в метро используются бесконтактные смарт-карты. Сейчас уже даже в наземном транспорте кондукторы проверяют такие проездные спец-девайсом. Так что думаю, что это уже не за горами. |
| Автор: AntonSaburov 18.1.2008, 13:21 |
Ну статья вообщем не новая - аж 2002 года. Кстати спецификация 2.1 тоже уже очень не новая - аж 1999 года. Я смотрел спеку 2.2.2 - она датирована мартом 2006. В новой спецификации 2.2.2 я такого не нашел - что нет сборщика. Искал, искал, но пока не обнаружил. Нашел только вот такое: Aside from its persistent nature, the Java Card virtual machine is just like the Java virtual machine. Persistance nature - это означает, что при исчезновении питания JVM на карте не уничтожается как процесс - "она запущена всегда". Мало того, JavaCard JVM восстанавливает хип (даже не восстанавливает, а просто его использует, т.к. он тоже не уничтожается), который был во время отключения. Если конечно использоваться будет тот же апплет. Если другой - ну значит его загрузит JVM и он "поедет" |
| Автор: nornad 18.1.2008, 15:00 |
Ну, то, что в Питере и Москве меня интересует постольку поскольку. В нашей деревне енто дело может и через двадцать лет только появиться. Хотя, в общих чертах познакомиться с технологией интересно. А ежели ещё и найти, как в домашних условиях поиграться - вообще классно будет. |
| Автор: AntonSaburov 18.1.2008, 15:23 | ||
Вот поучим, посмотрим - может и правда в домашних условиях сделаем что-нибудь. |
| Автор: v2v 18.1.2008, 15:38 | ||
не так то просто будет... для реализации работы с java card ведь нужно ещё спец. hardware: как минимум считыватель (стоимостью от 10у.е.) ну и карточка (стоимостью от 3у.е.) ... так что не каждый себе может такое позволить , для того , что-бы "просто попробовать" что это такое... |
| Автор: Alexandr87 18.1.2008, 15:42 |
| А что, эмуляторов нет? |
| Автор: v2v 18.1.2008, 15:44 |
| хмм. не подумал... действительно наверное есть... но ведь эффект не тот |
| Автор: AntonSaburov 18.1.2008, 15:46 |
| Эмулятор есть - думаю, что на следующей неделе выдам первый материал. |
| Автор: v2v 18.1.2008, 16:11 | ||
| действительно есть, и на сколько я понял он входит в java card developer kit was is das:
вообщем кто хочет поигратся качайте JCDK , читайте java доки и запускайте примерчики. AntonSaburov, на самом деле, я думаю щас было бы более интересно разобрать тему (возможности) 6й явы. а также рассмотреть бессплатные java framework - и, по крайне мере для меня. ведь материала на эти темы в рунете тоже нету (очень мало). |
| Автор: nornad 18.1.2008, 16:56 | ||||
Ну, я к таким ценам готов. Чтобы поиграться - хватит, думаю, карточек 10 (если они не перепрограммируются). Итого - от 40 уёв. В принципе, сносно для баловства. Зато при случае можно будет подключиться к какому-нибудь проекту.
А я бы непрочь глянуть на что-нибудь начальное по Hibernate + EJB3 на русском. Получив базу можно и на инглише что-то глядеть, но базу лучше на русском. Кстати, извиняюсь за офтоп - может, такое уже есть где? Глядел сегодня литературу на форуме и особо не нашёл. Да и не особо тоже - только инглиш. |
| Автор: v2v 18.1.2008, 17:08 | ||
сабж не сильно сложный.. если голова есть можно и без баловства подключатся). в своё время занимался схожей темой на сях. |
| Автор: AntonSaburov 18.1.2008, 18:50 | ||
Да вообщем-то писал уже - http://forum.vingrad.ru/articles/topic-191562.html
По Hibernate пока нет, а некоторые наметки по EJB 3.0 (самые простые) я делал http://antonsaburov.narod.ru/students/content.html - части 11, 12, 13 И давайте не будем флеймить - и так уже достаточно много. Здесь обсуждаем Java Card. Раздел новый, пробный. Может месяца через 3-4 и закроем из-за непопулярности. |
| Автор: v2v 18.1.2008, 22:31 | ||||
вот прочтения этой статьи меня и заинтересовало ... напр., хотелось бы побоольше узнать про скриптинг
что получается jc является частью j2me ? |
| Автор: Alexandr87 19.1.2008, 08:21 | ||
деньги налом получаете? интернет -банкингов нет? e-cash нет? мобильников тоже нет? Кстати у вас водительские удостоверения в караганде старого образца? |
| Автор: AntonSaburov 21.1.2008, 17:20 |
Нет - Java Card является подмножеством Java со своими особенностями. С J2ME можно сказать не имеет ничего общего - условно конечно. Язык все-таки JAVA. Но основные концепции - другие совсем. |
| Автор: firstone 22.1.2008, 11:22 |
| Доброго времени суток, господа программисты! Пожалуй это я стал инициатором. И я премного благодарен администрации форума за то, что поддержали идею. Как правильно заметил AntonSaburov, в Рунете нет ни одного нормального ресурса по этой технологии, а ведь она ой как проста! О себе: Программист в компании OTI (www.otiglobal.com) занимающийся преимущественно разработкой офф-кард сервисов и апплетов для Java Card (пусть слово апплет вас не вгонит в заблуждение. В JC апплет - это программа, которая записывается на smart card). Моя конечная цель - показать насколько это просто (и дешево) создавать самому приложения на smart cards. Представляете! Вы сможете сами написать программу для входа в Линукс при помощи smart card! И у кого не будет такой карты не сможет ничего сделать! В общем, применений можно найти уйму. Просьба: я не живу в СНГ уже 9 лет и посему мой русский хромает (в добавок я дислект Надеюсь наше пионерство пойдет далеко. Удачи! Добавлено через 3 минуты и 7 секунд Чтобы вас не мучали сомнения, скажу, что цена смарт карты (engineer sample card) ~ $5, Smart card reader - уже почти стандартное устройство. А кроме этих двух компонент вам более ничего не надо! |
| Автор: javastic 22.1.2008, 16:03 |
| Ну вот и славненько! Видите как форум пошел развиваться, значит не зря письма писал. =)) |
| Автор: Bulat 25.1.2008, 15:22 | ||
Стоять не трогать. Я хоть сейчас абсолютно на перле, но яву не забываю, как не забывается первая любовь |
| Автор: Samuil 29.1.2008, 11:38 |
| firstone, уважаю. Приведи пожалуйста самый простенький пример на JC, как Hello World и как его откомпилить. Эта тема заинтересовала многих, и я думаю им тоже будет интересно. Заранее благодарен. |
| Автор: nornad 29.1.2008, 16:51 | ||
Удостоверения - не знаю, машины нет, прав тоже. Да и не горю желанием машину приобретать - на дорогах и без меня гонщиков валом. Деньги у нас всё чаще карточками, но в магазин у нас с карточкой ходить неудобно - редко, где принимают. Интернет-банкинга у нас нет. Точнее, были попытки у пары банков, но это ТАК удобно, что все их нафиг послали. e-cash у нас только вебмани, да и те всего в нескольких точках в городе. Добавим, что продают их не весь день, а только в определённые часы и за бешенные деньги (курс бакса процентов на 20 выше, чем в обменнике, если покупать и несколько ниже, если продавать) - выходит, что и их практически нет. Вот я и говорю - деревня. |
| Автор: firstone 30.1.2008, 14:15 | ||||||||
| Здравствуйте, Samuil. Попытаюсь по максимуму объяснить как и что работает, но все же необходимо написать отдельную статью. И так, любая программа для Java Card (тут я имею в виду физическую карту) есть класс наследуемый от абстрактного класса javacard.framework.Applet. Есть минимальный набор методов, которые должны быть реализованы для того, чтобы обеспечить загрузку апплета в память карты и его функционирование, а именно:
Для того, чтобы лучше понять следующее Вам желательно ознакомиться со статьей "Смарт карты. Общие сведения". И так, самый простой апплет будет следующего вида:
И так, давайте посмотрим, что у нас есть. Метод install не использует опциональные параметры установки апплета, которые могут быть посланы. Единственное, что он производит - это обязательную регистрацию самого апплета в реестре смарт карты (Java Card Run-time Environment). Таким образом смарт карта будет "знать", что у нее установлен этот апплет. Каждый апплет должен иметь уникальное имя AID (Application ID) которое сохраняется в коде аплета (после компиляции) и в реестре JCRE после регистрации. Еще одна важная вещь, касающаяся установки апплетов. Вся память, которая когда-либо потребуется нашему апплету должна быть (настоятельно рекомендовано) выделена при установке. Ресурсы памяти у смарт карты ограничены и не могут быть выделены при каждом new. Метод process на первый взгляд немного посложнее. В первой проверке (if (selectingApplet()) ... ) проверяется, не была ли последняя команда SELECT (определена в ISO/IEC 7816-4) запущена для выборки этого самого апплета. Дело в том, что для того, чтобы послать что-то определенному апплету, необходимо его заведомо выбрать командой SELECT. Это объясняется тем, что на одной карте могут быть установлены несколько апплетов. Далее мы получаем все байты посланного APDU в массив buf. По хорошему после этого нам бы следовало проверить первый байт (CLA - класс команды APDU) на предмет его принадлежности к поддерживаемым CLA значениям нашего апплета, но мы этого не делаем для простоты примера. Далее мы проверяем значение второго байта APDU - INS (INStruction code - код команды). INS определяет команду, которую нужно выполнить будь то получить какие-либо данные персонализации (имя, фамилия, номер студента, аддресс и т.д.), послать какие-либо данные или выполнить любую другую операцию (например отнять от текущего баланса стоимость телефонного разговора). Как видно из примера единственный поддерживаемый код - 00. При получении этого кода наш апплет ничего не делает. Особого внимания заслуживает ситуация default. Поскольку память у смарт карты ограничена несколькими десятками килобайтов, ее нельзя попросту использовать, как ОЗУ у ПК. Поэтому мы не можем просто так создать объект класса ISOException. Для того, чтобы выкинуть exception, необходимо воспользоваться предлагаемым методом: throwIt. Ну что ж, давайте порпобуем скомпилировать и установить на карточку нашу программу. Прежде всего несколько слов о компиляции. Нужно использовать транслятор для Java версии 4. после того, как мы получили .class файл, его необходимо сконвертировать утилитой от SUN (в пакете JC Development Kit) в .cap файл. Далее этот файл загружается на карту. Процесс загрузки описан в открытом стандарте Global Platform и Java Card Specification. Я написал свой собственный uploader. В последующих статьях я буду детально описывать формат .cap файла и каким образом он должен быть переслан на карту. И так, после загрузки и установки апплета, выберем его по его AID:
Сразу объясню что и как. Здесь стрелочка => указывает на то, что данные были посланы карте, а стрелочка <= - на получение данных с карты. И так, первая команда: 00 A4 04 00 07 A0 00 00 02 47 55 55 00. Если Вы читали мою первую статью, то должны знать, что: CLA: 00 - класс команд ISO INS: A4 - инструкция (команда) SELECT (см. ISO/IEC 7816-4 раздел 7.1.1) P1: 04 - первый параметр команды SELECT (выбрать по имени аппликации, т.е. AID) P2: 00 - второй параметр (выбрать при первом или единственном случае) Lc: 07 - длина поля Data (в нашел случае содержит AID) Data: A0 00 00 02 47 55 55 - поле Data хранит AID нашего апплета (я задал его изначально). Le: 00 - количество байт в сообщении response на это APDU. Обратите внимание, что код возврата - 9000, т.е. карта сообщает об успешном выполнении операции (команды SELECT). Далее мы можем уже послать команду непосредственно нашему апплету.:
Давайте посмотрим, что это за команда. На самом деле она нигде не определена. CLA: 80 - выбрал его просто так INS: 00 - единственный код инструкции, который поддерживает наш апплет. P1: 00 - я не определял никаких параметров для инструкции P2: 00 - || --- || --- || --- || --- || --- || --- || --- || --- || --- || --- || --- || --- || --- Обратите внимание, здесь нет опциональных полей Lc и Data. Наш апплет работает. На наш запрос вернулся ответ 9000 - индикатор успешного выполнения операции. Давайте попробуем вызвать ошибку. Сделать это просто - послать любой другой код инструкции, например 01:
Ч.т.д. Надеюсь этот пример пролил немного света на технологию Java Card. Если что-то непонятно, или понятно но не до конца, спросите. Я буду рад Вам помочь. С уважением, firstone. |
| Автор: firstone 30.1.2008, 15:43 |
| nornad, доброго времени суток! Скоро у вас (в Казахстане) появятся новые водительские удостоверения. На картах будут установлены апплеты Java Card. Наша компания учавствует в этом проекте. |
| Автор: LSD 30.1.2008, 18:11 | ||||
Я не увидел его в коде апплета. AID как-то генерируется компилятором (наподобие serialVersionUID) или просто здесь пропущен?
Можно поподробней о входных параметрах, и что за метод был вызван в коде? И надо обязательно реализовывать его как static? |
| Автор: firstone 30.1.2008, 19:10 | ||||||
Приветствую, LSD.
Это скорее я неправильно выразился. Всего есть 3 разных AID на карте, если мы загружаем апплет: 1) для package (появляется после загрузки package'а) 2) для класса апплета (появляется после загрузки package'а) 3) для объекта апплета (появляется только после установки - install) В одном package могут быть несколько апплетов. При установке необходимо указать AID package, AID класса апплета и AID нового объекта апплета. AID package и AID класса сохраняются в скомпилированном коде .cap файла. Туда его записывает программа-конвертор (есть программы, которые и компилируют и конвертируют). Когда package и класс(ы) апплета(ов) записываются на карту, они регистрируются но с помощью специальных APDU команд. Далее при установке, указывается еще один AID - для объекта апплета.
Входные параметры могут содержать информацию о, например, количестве необходимой памяти для апплета. Если вам известно, что в процесс персонализации карты (т.е. записи в нее информации о уже конкретном человеке) будет использовано до 14кб для фотографии лица, то в методе install нужно будет выделить этот буфер. Извините, я не понял Ваш вопрос касательно "что за метод был вызван в коде?". Если вы о register, то у него есть два перегрузчика:
Первый метод получает AID для объекта апплета и регистрирует его. Второй берет AID класса апплета и регистрирует объект с тем же AID. Касательно Вашего третьего вопроса - ответ да. Когда вызывается метод install, объект апплета еще не инстанциирован (или как там по-русски будет instantiated). В классическом случае именно install должен вызвать конструктор апплета. Надеюсь это немного помогло Вам. Добавлено через 6 минут и 38 секунд Все же я забыл сказать. Все AID прописываются вручную. |
| Автор: LSD 5.2.2008, 15:09 | ||
Под package подразумевается .cap файл или package-и Java? Да я об этом. Тогда мне непонятен код примера:
мы получили AID, а вот дальше делаем с ним, что-то странное. Почему мы просто не передаем полученный AID методу register самого апплета? |
| Автор: firstone 6.2.2008, 20:10 | ||
| Добрый вечер, LSD. Извиняюсь за отсутствие. Работа, жена, дети... К сожалению у меня не получается ответить полно в одном посте. Поэтому получается диалог. Package-и Java. Каждый такой package должен содержать один или более апплетов. Тут важно еще уяснить терминологию. В серии стандартов ISO 7816 определена следующая иерархия: Executable Load File под ним могут быть несколько Executable Load File Modules. Так вот этот Executable Load File = package, а Executable Load File Module = applet. Ну а application = instance of applet. ОК. Дело в том, что я упустил тут кое что. Посмотрите на прототип метода install:
Здесь первый параметр содержит в себе три составляющих, а именно:
AID объекта апплета уже обсуждалось. Контрольные данные - это в принципе привилегии (privileges) для апплета (т.е. перечень специальных действий которые ему разрешается выполнять). Обычно 1-3 байта Данные апплета = параметры для апплета (определяются разработчиком) |
| Автор: jmdonetsk 18.4.2011, 02:03 |
| firstone, а можно поподробнее ( или ткнуть где почитать) Интересно : - взял пример http://forum.vingrad.ru/articles/topic-206206/anchor-entry2332063/0.html, но там все заканчивается на самом интересном месте : "Давайте теперь запустим наше приложение на карте." - еще было бы интересно узнать как выполнить этот апплет с помощью клиента написанного на C++ или Delphi |