How to do Homekit Software Authentication? - authentication

My company had developed his own smart home hardware which uses MQTT protocol. We can't use any Apple Authorization Coprocessor chip in our hardware. I have heard the apple had released Software Authentication for HomeKit.
But I searched a lot but not got how to do that.
I was using homebridge previously but that was a big trouble for supporting all devices. Can anyone please give me steps for how to do Software Authentication for HomeKit.**

Software or hardware authentication is used to verify with Apple that the accessory is an official "Made for iPhone" product. It's stands apart from the HomeKit Protocol that is specified here.
When your company wished to make official HomeKit Accessories, you must enroll your company to the MFI Program. (This is different than the Developer Program for making apps). When you are enrolled, you'll also get all the documentation needed for the Software Authentication.
Keep in mind that the software authentication is only an alternative so you don't have to use the hardware authentication chip. You still have to comply to all the requirements and rules of the HomeKit Protocol.
You are stating that you are using MQTT. Officially this can't be used to control your accessories with HomeKit. HomeKit must communicate directly with it's own protocol to the accessory. When you are using something like a bridge (What Philips Hue is doing). Then you may only control non IP or Bluetooth devices with that bridge. Please see chapter bridges from the specification. At the time of writing this is chapter 2.5.3.2 from Non-Commercial version R1: Accessories that support IP transports, such as Wi-Fi, must not be bridged.

Related

How can I contribute ports?

I am trying to port https://github.com/Azure/azure-iot-sdk-c to VxWorks. I have created 2 PRs:
https://github.com/Azure/azure-iot-sdk-c/pull/2022
https://github.com/Azure/azure-c-shared-utility/pull/538
I have signed the CLA but don't know how to proceed.
I have referred the contribution guide: https://github.com/Azure/azure-iot-sdk-c/blob/master/.github/CONTRIBUTING.md.
But the section "Contributing Ports" is TBD.
My PRs seem stuck there. All CI checks are pending.
Could you please let me know what I should do next?
thank you for your PR! Getting the VxWorks RTOS ported to work with Azure IoT services seems to be a great idea. The only caveat here is choosing the right SDK to get this done: in your case you used the C SDK which can be too big for constrained devices.
The best SDK for constrained devices and porting a RTOS would be the Embedded C SDK which is smaller, non-allocating, and very flexible as it allows you to use whichever MQTT, TLS and Socket your target platform needs.

Using CoreBluetooth to connect to Windows10 with iOS devices

Question1.
IOBluetooth can support connection both ways via LE or classic. However it only supports macOs. CoreBluetooth supports only up to LE along with IOS.
As far as I know, in order for me to connect my bluetooth connection within IOs device, I must use CoreBluetooth frameworks. Am I correct?
Question2.
CoreBluetooth frameworks can connect Windows10 labtop with bluetooth connection?
Your question is a bit vague. I assume you just want to have a way to exchange some data between an iOS app and your Windows 10 desktop.
Yes, you are correct. Usage of Bluetooth Classic in any of your iOS apps requires Apple MFI Membership and only makes sense if you have your own product. If you are not a member of the MFI program then you are left with CoreBluetooth (BLE). Please note, that BLE is significantly slower than Bluetooth Classic so it only makes sense for applications that require transmission of small data packets (expect around 4kB/s max).
Yes, as long as your Windows 10 device supports BLE. If you want to use any of the SIG adopted Profiles such as HID over Gatt you should be able to connect without any additional software. Otherwise you need to implement your own profile. If you want to know more about your options, I suggest you have a look at the CoreBluetooth documentation and/or get a copy of Getting Started with Bluetooth Low Energy which is a comprehensive read on the topic.

NS-3 WIFI Base Station and accesspoint handover

I am a new user of NS-3. Can you help me in writing a code of handover in between nodes in Wi-Fi environment?
I'm gonna base my response on the little information you have provided.
General idea of Wi-Fi (as the technology which we use on daily basis to connect to internet and stuff like that :D) is based on IEEE 802.11 standard which does not support handover between nodes. Therefor you either are asking the wrong question or you want to implement the handover support to a IEEE 802.11 standard.
In case you want to do the latter I strongly suggest you to do the following steps (NS-3 tutorial in case needed):
1- Install NS-3 simulator on a Linux operating system, preferably Ubuntu 14.04.
2- Browse wifi/examples folder and try to fully understand basic wifi examples.
3- Implement your proposed algorithm in proposed scenario (Which obviously requires you to understand how user equipment connects to a Wi-Fi access point automatically and how APs can interact with each other and etc.).

Required Things to start Smartcard Programming Using Javacard

I wanted to start with the smartcard programming soon. Please help me the things required for starting the learning using javacard. Which IDE (If any IDE Supports), Software and Hardware related? Like Mobile phone simulator is there any smartcard simulator or else if I have to buy a smartcard specify those cards where and how I can get?
A general answer regarding smartcard programming is that you should be ready to navigate a confusing list of tools and technologies. Typically smartcard developers begin with a specific hardware platform in mind: more specific than simply javacard.
Since you've specifically mentioned javacard, we can focus on a few starting points.
Javacard SDK
You might begin with the javacard dev kit. I haven't used the most recent - I'm still using 2.0.2. This dev kit is very command-line oriented, so expect to be doing most of your work outside an IDE. However, the documentation is pretty helpful and should get you up to speed pretty quickly. At any rate, it's a good place to start, since it's official.
EclipseJCDE also looks interesting, but I haven't used it. I seem to recall another project aiming to build javacard Eclipse tools, but I may just be thinking of EclipseJCDE.
IBM Tools
At one time IBM published and maintained a set of JCOP tools that integrated with the Eclipse IDE. The great thing about this is that they would send you a package containing some dev tools and a couple of JCOP cards. The annoying thing is that an activation code was required. Have a look here. The download link is still good, good luck with the email address listed there. Also note that these tools require an older build of Eclipse. The build/debug support is very good, including a built-in javacard simulator.
Global Platform
If you plan on doing javacard programming, you should also get to know Global Platform. It's a smartcard standard, and in the context of javacard, you'll need to know about the GP spec when you need to load and manage javacard applets. This is required for working with JCOP cards. For the latest GP spec search for GlobalPlatform Card Specifications. You'll need to be very familiar with basic smartcard concepts, e.g. APDUs.
Hardware
Hardware choices are too varied for me to make useful recommendations, beyond the JCOP stuff above. As I mentioned, if you can use the IBM kit then you'll get a good JCOP/javacard simulator with the Eclipse tools. I'm sure there are other card simulators available.
etc.
Beyond that there is a long list of other technical specifications employed by smartcard programmers, and unfortunately many of them aren't freely available (ISO docs). If you'll be doing GSM programming, I think you can get to all of the GSM specs, search for ETSI GSM specifications. GSM 11.11 is particularly useful for learning more about APDU command/response, without access to ISO specs, e.g. ISO 7816-4.
Share two new Free tools that I am using to learn javacard here.Hope to help others get started with javacard easily.
JCIDE: It is an Integrated Development Environment designed specifically for the Java Card programming language.
PyAPDUTool: It is a handy tool which can communicate with the card via the reader connected to PC. It is a PC/SC compliant application.

Is there something like a URI for USB devices?

I'm wondering if there is a specification around to address USB devices like:
usb://...
Does anyone know?
There is a URN format which any device which supports the Universal Plug-and-Play protocol can use to advertise its capabilities:
When a device is added to the network, it multicasts discovery messages to advertise its root device, any embedded devices, and any services.
For example:
urn:schemas-upnp-org:device:deviceType:v
urn:schemas-microsoft-com:device:MediaCenterExtenderMFD:1
urn:schemas-wifialliance-org:device:WFADevice:1
urn:schemas-upnp-org:device:BinaryLight:1
urn:wifialliance-org:serviceId:
urn:microsoft-com:serviceId:NULL
urn:upnp-org:serviceId:SwitchPower:1
References
Remote Experience Advertisement Protocol: Appendix B: UPnP Device Description
Writing a UPnP Service
RFC 7255: Using the International Mobile station Equipment Identity (IMEI) Uniform Resource Name (URN) as an Instance ID
WFA Device 1.0 (pdf)
UPnP Technical Basics: UPnP Device Architecture (UDA) (pdf)
Nodejs implementation of the UPnP Device Architecture 1.1
Zoltan Balazs: The real risks of the IoT security nightmare (pdf)
Learning IoT Security: Jan 2016 (pdf)
Accenture Security Call to Action: IoT PoV (pdf)
The QName URN Namespace
URIs, URLs, and URNs: Clarifications and Recommendations 1.0
URL vs. URI vs. URN, in More Concise Terms | Damnhandy
Yes. Per kcmshell5 kcm_printer_manager, literally usb://.
https://learn.microsoft.com/en-us/dotnet/api/android.hardware.usb.usbaccessory.uri?view=xamarin-android-sdk-13&viewFallbackFrom=xamarin-android-sdk-9 may additionally provide USB URIs, but I have not evaluated it.