Coder Social home page Coder Social logo

kfdtool / kfdtool Goto Github PK

View Code? Open in Web Editor NEW
123.0 50.0 50.0 6.8 MB

Open Source P25 KFD (Key Fill Device/Keyloader/KVL)

Home Page: https://kfdtool.com

License: MIT License

Batchfile 1.05% C 73.52% Python 4.73% C# 20.48% PowerShell 0.23%
p25

kfdtool's Introduction

Open Source P25 Key Fill Device

Compliant with P25 standards (TIA-102.AACD-A)

Purchase Hardware: online store

Download Software: latest release

Release Notifications: subscribe

Demonstration: video

Software Manual: view

Security Considerations: view

Features

Key Fill Device (KFD)

The KFDtool software supports KFD features through the KFDtool hardware adapter (TWI/3WI/Three Wire Interface), as well as through a IP (UDP) connection (DLI/Data Link Independent interface).

Keys and groups of keys can be saved to an AES-256 encrypted key container file, which can then be selected and loaded into a target device in one operation.

Supported Manual Rekeying Features (TIA-102.AACD-A)

  • 2.3.1 Keyload
  • 2.3.2 Key Erase
  • 2.3.3 Erase All Keys
  • 2.3.4 View Key Info
  • 2.3.5 View Individual RSI
  • 2.3.6 Load Individual RSI
  • 2.3.7 View KMF RSI
  • 2.3.8 Load KMF RSI
  • 2.3.9 View MNP
  • 2.3.10 Load MNP
  • 2.3.11 View Keyset Info
  • 2.3.12 Activate Keyset

Motorola refers to the P25 standard 3 wire interface (3WI) keyload protocol as ASTRO 25 mode or CKR mode.

The legacy Motorola proprietary keyloading formats SECURENET and ASN (Advanced SECURENET) are NOT supported by KFDtool. PID mode is also used to refer to ASN mode.

Key validators/generators are available for the following algorithms:

  • AES-256 (Algorithm ID 0x84)
  • DES-OFB (Algorithm ID 0x81)
  • DES-XL (Algorithm ID 0x9F)
  • ADP/RC4 (Algorithm ID 0xAA)

Mobile Radio (MR) Emulator

The KFDtool software only supports MR Emulator features through the KFDtool hardware adapter (TWI/3WI/Three Wire Interface) at this time.

This mode allows another keyloader to be connected to the KFDtool, and the keys retrieved.

Supported Manual Rekeying Features (TIA-102.AACD-A)

  • 2.3.1 Keyload

Radio Compatibility

Any statements of compatibility do not imply endorsement by the vendor. Testing has not been performed by the vendor themselves.

A detailed list of compatible radios and adapters is available here.

Radios that are compatible with Motorola KVL3000/KVL3000+/KVL4000/KVL5000 keyloaders in ASTRO 25 mode should be compatible with KFDtool.

Keyloading cables made for other radios with MX (Motorola KVL) connectors can be modified by soldering an AC101 or AC102 Hirose pigtail in parallel with the MX connector according to these instructions.

Operations encapsulated with encryption (commonly referred to as FIPS mode) are not supported at this time for either the KFD or MR emulation modes.

Hardware

Assembled and tested KFDtool hardware is available from me directly. I can ship internationally. Please visit the online store to place an order.

Proceeds from hardware sales enables me to further develop the software.

Part Number Description
KFD100 Single Hirose port USB key fill device (includes 1 m / 3 ft USB A to USB B cable)
AC100 6 pin male plug Hirose to 6 pin male plug Hirose cable (0.5 m / 1.5 ft)
AC101 6 pin male plug Hirose pigtail for custom cables (0.5 m / 1.5 ft)
AC102 6 pin female jack Hirose pigtail for custom cables (0.5 m / 1.5 ft)
AC103 Motorola R2670 compatible adapter (0.15 m / 6 in)
AC104 Kenwood KPG-115 compatible adapter (0.15 m / 6 in)
AC105 4 way female jack passive Hirose splitter
AC106 Kenwood KPG-93 compatible adapter (0.15 m / 6 in)
AC107 Motorola XTS4000 compatible adapter (0.15 m / 6 in)
AC108 Aeroflex/IFR 2975 compatible adapter (0.15 m / 6 in)
AC109 Harris XG-100P/XL-150P/XL-185P/XL-200P compatible adapter
AC110 KFDShield TRS compatible adapter (0.15 m / 6 in)

OS Compatibility

  • KFDtool software supports 32-bit and 64-bit Windows 7, Windows 8.1, and Windows 10

  • The .NET Framework 4.7.2 or later compatible must be installed

  • The use of a virtual machine with USB passthrough is NOT supported at this time

    • Changing the USB controller from USB 2.0 mode to USB 3.0 mode has been reported to resolve the issue
    • Do not attempt to update the adapter firmware or initialize an adapter using USB passthrough

Documentation

Community Forks

The following projects are community created forks of the KFDtool project.

License / Legal

KFDtool software, firmware, and hardware is distributed under the MIT License (see LICENSE.txt).

KFDtool is a trademark of KFDtool, LLC

All product names, trademarks, registered trademarks, logos, and brands are property of their respective owners. All company, product, and service names used are for identification purposes only. Use of these names, trademarks, logos, and brands does not imply endorsement.

Included open-source components:

Software (see doc/SW_LICENSE.txt):

Firmware (see doc/FW_LICENSE.txt):

  • Texas Instruments - BSD 3 Clause License

kfdtool's People

Contributors

db-spl avatar duggerd avatar grover556 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kfdtool's Issues

Implement proper receive framing in firmware

Currently the firmware expects all data to come in one USB transfer, add proper framing in firmware receive routine to remove this limitation and make communications more reliable

KVL4000 fails to keyload in MR emulation mode

When attempting to keyload in MR emulation mode, the KVL4000 reports the radio is not responding.

From logs, the KVL4000 is attempting to read the radio RSI first (Message ID: Inventory-Cmd 0x0D, Inventory Type: List RSI Items 0x0B). This is not the procedure specified in the P25 standard (TIA 102.AACD-A 3.8.1).

List RSI items is not implemented in the current functionality, so it will need to be added.

The KVL4000 may request more information after completing the list RSI items request, so additional features may need to be implemented other than list RSI items for the entire keyload operation to complete.

Key Encryption Key (KEKs)

Hello,

I was wondering if there would be any interest in adding support for Key Encryption Keys to the MSP430 firmware. It's something I could probably put together easy enough once the hardware goes on sale, and it would make it possible to protect the keys from the host system.

There's a couple ways it could be handled on the host side, like supporting an encrypted blob (easiest) that's decrypted on device, or even using PKCS11 to wrap and/or derive keys (which would let a smart card or HSM be used).

It's not going to be perfect security - the MSP430 isn't really hardened against differential power analysis, for example, but it would be a step towards not needing to trust the host.

APX Pinout

I am looking to build my own cable to talk to the KFD. However, I am not able to find a proper pinout for the APX Radio?

Where would I find the pinout? I am not seeing it in any of the documentation.

Key Container

Add a key container file to support the ability to store keys in a file.

  • XML as data format? Could use standard XML encryption abilities.
  • Support individual keys as well as groups of keys. Also support macros to be able to load and delete keys with one operation.

Keyloading with KEKs fail

When attempting to keyload a KEK, the operation fails with a nonzero status.

The TEK/KEK flag is not being set in the modify key command KMM.

MR emulator will allow start with no device selected

With no device selected, the UI will permit you to press the 'Start' button with no error message. The interface will act normally, and will permit you to press 'Stop' with no error message.

Add a check to show an error when no device is selected and 'Start' is pressed.

Wireshark Dissector

Add functionality in the KFDtool software to send the KMMs to Wireshark over a named pipe. Will need a custom link-layer header type/intermediate protocol and the addition of the C dissector to the Wireshark upstream.

Add support for operations encapsulated in encryption

To allow support for radios and keyloaders in FIPS compliance required modes.

Attempting to keyload an APX radio with FIPS mode enabled results in an invalid status message. Disabling FIPS mode is currently the recommended workaround.

Create keyset automatically when active keyset is checked

When a radio is keyloaded for the first time, there are no keysets. Therefore, when the active keyset option is selected (default behavior), no keysets are found and therefore the error "no active keyset" is returned.

While technically correct behavior, this isn't a great user experience. The Motorola KVLs in this situation silently use keyset ID 1.

A dialog should be shown saying that no active keyset is found, and ask the user if keyset ID 1 should be used.

Scripting Interface

Add a scripting interface, most likely at two levels. One level would be a higher level API with key load/ key erase/etc functionality. The other level would be a lower level API with byte level access to the TWI hardware.

  • Higher level API can be PowerShell, lower level API can be a .NET API for custom .NET programs.
  • Demo application of keyloading both TEKs through TWI and LLAKs through PPP?

Error Message on Portable Radio read/write

KFD- Shield
FW 1.4.0
SW 1.5.4

When connected to a mobile (APX 6500) reads keys and writes keys with no issue.

Same cable connected an APX portable (APX 6000 x3 radios and APX 8000 x2 radios) gives error message and does not perform the job.

Error message: Error-- timeout waiting for data

Same hirose radio adapter used with KVL5000 has no issues. Same cable for both mobile and portable, just swapping the end adapter.

Exit menu item does not match window close button behavior

When user requests program exit through the window close button, it will ask to save the container if it is unsaved/prevent exit if the MR emulator is running. The exit menu item will display the dialogs, but will not prevent exit. This is due to the Application.Current.Shutdown() function used in the Exit_MenuItem_Click() function, rather than the Close() function.

Also return after preventing exit due to the MR emulator.

Unit Tests

Write unit tests - especially for the KMMs

Batch keyloading

Devise a method to batch load all 32 keys into Keyset 1 and 2

DLI Not working?

I've tried 3 installs on 3 different devices, none of them are working. DLI was working on an older build (for me at least) and after updating to latest, it stopped working.

Device: APX 900 (SW AES Enabled on flash)
KFDTool Ver: Latest (as of submission of this issue)
Issue: See image
image

Windows detects the radio, pops up the network thing that it does when you connect an APX and CPS works fine so I know its not my cable or my system?

User Manual

Write user's manual to replace placeholder PDF.

  • Use Word or Sphinx/Read the Docs?
  • Should screenshots be included or just text?

KFD to KMF Interface

Once the KFD to KMF interface has been published in the TIA-102 standards, add this functionality.

Optional Manual Rekeying Features

Add the remaining optional rekeying features:

  • 2.3.5 View Individual RSI
  • 2.3.6 Load Individual RSI
  • 2.3.7 View KMF RSI
  • 2.3.8 Load KMF RSI
  • 2.3.9 View MNP
  • 2.3.10 Load MNP
  • 2.3.11 View Keyset Info
  • 2.3.12 Activate Keyset

Clarify Self Test Warning Dialog

Currently when running the self test, the dialog says to disconnect the radio, however the cable and radio adapter should also be disconnected. The self test feature is only designed to test the unit, not the cable or any radio adapters. When running the self test with some radio adapters, the self test will report a failure when the unit is actually functioning properly.

Firmware upgrade fails occasionally

Firmware upgrades or unit initializations will occasionally fail with an error message, or the GUI will just hang indefinitely.

CPU usage is high during the upgrade process, which might be a factor.

Add automatic recovery attempts, as well as display a message pointing to documentation on how to recover the unit manually.

Document in the manual how to recover the unit manually.

Script Software Release Process

Currently the software release process is manual - use PowerShell to script the build of the control software, installers, digital signing, packaging, and hashing.

XTS/XTL Pinout

I am looking to build my own cable to talk to the KFD. However, I am not able to find a proper pinout for the XTS/XTL Radios?

Where would I find the pinout? I am not seeing it in any of the documentation.

Allow reordering of keys in group

Currently the list of keys and groups can be reordered, but not the list of keys in a group. Add support for reordering of keys in a group.

3WI session does not end cleanly after error

When an error is encountered in a 3WI session, the session terminates immediately and does not complete the transfer done/disconnect/disconnect ack sequence.

Radios should timeout after 5 seconds, however some do not and the next session results in an error.

MR Emulation

Add a mode to emulate a radio being keyloaded to be able to view loaded key variables.

Multiple Keyload

Add the ability to load/delete multiple keys at a time.

  • Add logic to split list of keys by keyset ID/algorithm ID for multiple KMMs
  • Add interface (multiple pane?) to GUI for this function

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.