<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.h5yy.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kscz</id>
	<title>kitwiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.h5yy.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kscz"/>
	<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php/Special:Contributions/Kscz"/>
	<updated>2026-06-14T16:12:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=32</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=32"/>
		<updated>2025-04-24T15:37:39Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
Plug in a device which looks like a USB thumb-drive in size and shape. Pull out your phone - connect to the device via BLE.&lt;br /&gt;
&lt;br /&gt;
On your phone, select the name of the website you're trying to login to.&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;username&amp;quot; button, and the device will pretend to be a keyboard and type in your username. Press the password button and it will type in your password.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
While there are many details to how the system will be setup, the picture provides a very rough, high level design. Essentially, the system is comprised of 4 main components:&lt;br /&gt;
* an IC which serves as effectively a UART to BLE bridge - this is how the squid will talk to the phone&lt;br /&gt;
* a small (4MB?) flash chip which will hold the encrypted password database&lt;br /&gt;
* a secure enclave - probably the atecc608b - holds the key that can decrypt the password database&lt;br /&gt;
* an IC which will serve as the primary compute unit - its job is to interact with the backing storage, secure enclave, and BLE bridge to provide the main functionality&lt;br /&gt;
&lt;br /&gt;
[[File:Security Squid High-level HW Architechture.png]]&lt;br /&gt;
&lt;br /&gt;
===Secret Storage===&lt;br /&gt;
* In an ideal world, we will hold as few secrets as possible - the user should provide the keys and that unlocks everything&lt;br /&gt;
* Strong enough keys to survive storage at rest cannot reasonably be derived from user input - look to how whole disk encryption works on linux: user password decrypts on-disk key; on disk key is what the data is '''actually''' encrypted with&lt;br /&gt;
&lt;br /&gt;
==Security Model==&lt;br /&gt;
&lt;br /&gt;
===Threat Model: External Interfaces===&lt;br /&gt;
There are 2 external interfaces we need to defend: USB to the host PC, and BLE to the phone.&lt;br /&gt;
&lt;br /&gt;
The USB handling will be important to make sure that parsing failures and other sources of error don't lead to device compromise, but ideally we can use something like Rust to write the USB stack and avoid the majority of the types of bugs one might encounter writing a parser - we can crash the application on failures because a DDoS to the device is acceptable if we reveal no secrets.&lt;br /&gt;
&lt;br /&gt;
The bluetooth interface is more complicated - the bluetooth stacks on the market are generally considered not secure, and so we would prefer to have any interface which touches bluetooth to be insulated from the Vault Manager IC (VMIC). To this end, we will have a second SoC which manages bluetooth called the RFIC. The VMIC will interface via a simple serial (UART) protocol, which will feature both a command and control (C&amp;amp;C) protocol as well as a data pass-through protocol.  During regular operation, the UI Device/Phone will negotiate a secure channel with the VMIC, and the RFIC will simply see an encrypted packets which it will have no comprehension of the contents.&lt;br /&gt;
&lt;br /&gt;
===Threat Model: Physical Access===&lt;br /&gt;
If you drop the device, someone who has prolonged physical access should not be able to access the stored passwords either by using the device nor accessing the underlying hardware. This leads to a number of different scenarios we need to defend against.&lt;br /&gt;
&lt;br /&gt;
The first is that the data at rest has to be encrypted, and someone who gains access to that data should not be able to dump the data and access it. Much like whole disk encryption, we'll have both a data encryption key (DEK) and a key encryption key (KEK). Ideally, the data should not be brute-force decryptable in a reasonable timeframe - normally, this would be achieved by using something like an aggressive number of PBKDF2 rounds, but the VMIC will not have enough compute power to make this plausible when comparing against the hashing power of a modern CPU/GPU.  Because of this, we store the DEK inside a secure enclave, which can only be accessed through I2C. We will take the user input, pass it through PBKDF2 for a number of rounds, then use that as the KEK to request that the secure enclave reveal the DEK. Because the only mechanism to confirm a guess of the KEK is through the secure enclave IC, an attacker's hashing capability is rendered nearly meaningless.&lt;br /&gt;
&lt;br /&gt;
The next big threats relate to firmware/IC replacement attacks - assuming that the device firmware is possible to update, we act as if the device is possible to erase. Most devices allow for the entire device to be erased and reprogrammed, even when the flash is &amp;quot;locked.&amp;quot; Ideally, we should be able to make the device inoperable if this happens, by pairing some key between the secure enclave and the VMIC flash.  Thus, proper updates should be able to selectively erase flash sections and hostile flashes should be unable to maintain the secret in flash.&lt;br /&gt;
&lt;br /&gt;
A similar mechanism is necessary for RFIC firmware replacement - the Secure Enclave and the Phone/UI Device need to be paired such that the RFIC cannot interfere, even if compromised. Thus we expect that the pairing procedure will involve a private-public key pair from both the secure enclave and the phone, and all future communication will be mutually authenticated. Since the firmware of the RFIC only has access to bluetooth packets, this mutual authentication guarantees that the RFIC being compromised should not be able to meaningfully impact security.&lt;br /&gt;
&lt;br /&gt;
====Physical Attacks Ignored====&lt;br /&gt;
We're not assuming that there's a scenario where you are interacting with the device and an attacker can do complex analysis while you're decrypting the store. It is assumed the following attacks are not feasible without cooperation of the owner of the SecuritySquid&lt;br /&gt;
* Differential power analysis - the power comes from the host computer and the control signals for the decryption come from the phone, so an attacker should be unable to competently evaluate because they will lack timing information and context&lt;br /&gt;
* Timing attacks - similar to differential power analysis, an attacker that controls the USB interface should be unable to trigger the large number of repeated decryptions to successfully pull this off&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=31</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=31"/>
		<updated>2025-04-20T18:32:59Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
While there are many details to how the system will be setup, the picture provides a very rough, high level design. Essentially, the system is comprised of 4 main components:&lt;br /&gt;
* an IC which serves as effectively a UART to BLE bridge - this is how the squid will talk to the phone&lt;br /&gt;
* a small (4MB?) flash chip which will hold the encrypted password database&lt;br /&gt;
* a secure enclave - probably the atecc608b - holds the key that can decrypt the password database&lt;br /&gt;
* an IC which will serve as the primary compute unit - its job is to interact with the backing storage, secure enclave, and BLE bridge to provide the main functionality&lt;br /&gt;
&lt;br /&gt;
[[File:Security Squid High-level HW Architechture.png]]&lt;br /&gt;
&lt;br /&gt;
===Secret Storage===&lt;br /&gt;
* In an ideal world, we will hold as few secrets as possible - the user should provide the keys and that unlocks everything&lt;br /&gt;
* Strong enough keys to survive storage at rest cannot reasonably be derived from user input - look to how whole disk encryption works on linux: user password decrypts on-disk key; on disk key is what the data is '''actually''' encrypted with&lt;br /&gt;
&lt;br /&gt;
==Security Model==&lt;br /&gt;
&lt;br /&gt;
===Threat Model: External Interfaces===&lt;br /&gt;
There are 2 external interfaces we need to defend: USB to the host PC, and BLE to the phone.&lt;br /&gt;
&lt;br /&gt;
The USB handling will be important to make sure that parsing failures and other sources of error don't lead to device compromise, but ideally we can use something like Rust to write the USB stack and avoid the majority of the types of bugs one might encounter writing a parser - we can crash the application on failures because a DDoS to the device is acceptable if we reveal no secrets.&lt;br /&gt;
&lt;br /&gt;
The bluetooth interface is more complicated - the bluetooth stacks on the market are generally considered not secure, and so we would prefer to have any interface which touches bluetooth to be insulated from the Vault Manager IC (VMIC). To this end, we will have a second SoC which manages bluetooth called the RFIC. The VMIC will interface via a simple serial (UART) protocol, which will feature both a command and control (C&amp;amp;C) protocol as well as a data pass-through protocol.  During regular operation, the UI Device/Phone will negotiate a secure channel with the VMIC, and the RFIC will simply see an encrypted packets which it will have no comprehension of the contents.&lt;br /&gt;
&lt;br /&gt;
===Threat Model: Physical Access===&lt;br /&gt;
If you drop the device, someone who has prolonged physical access should not be able to access the stored passwords either by using the device nor accessing the underlying hardware. This leads to a number of different scenarios we need to defend against.&lt;br /&gt;
&lt;br /&gt;
The first is that the data at rest has to be encrypted, and someone who gains access to that data should not be able to dump the data and access it. Much like whole disk encryption, we'll have both a data encryption key (DEK) and a key encryption key (KEK). Ideally, the data should not be brute-force decryptable in a reasonable timeframe - normally, this would be achieved by using something like an aggressive number of PBKDF2 rounds, but the VMIC will not have enough compute power to make this plausible when comparing against the hashing power of a modern CPU/GPU.  Because of this, we store the DEK inside a secure enclave, which can only be accessed through I2C. We will take the user input, pass it through PBKDF2 for a number of rounds, then use that as the KEK to request that the secure enclave reveal the DEK. Because the only mechanism to confirm a guess of the KEK is through the secure enclave IC, an attacker's hashing capability is rendered nearly meaningless.&lt;br /&gt;
&lt;br /&gt;
The next big threats relate to firmware/IC replacement attacks - assuming that the device firmware is possible to update, we act as if the device is possible to erase. Most devices allow for the entire device to be erased and reprogrammed, even when the flash is &amp;quot;locked.&amp;quot; Ideally, we should be able to make the device inoperable if this happens, by pairing some key between the secure enclave and the VMIC flash.  Thus, proper updates should be able to selectively erase flash sections and hostile flashes should be unable to maintain the secret in flash.&lt;br /&gt;
&lt;br /&gt;
A similar mechanism is necessary for RFIC firmware replacement - the Secure Enclave and the Phone/UI Device need to be paired such that the RFIC cannot interfere, even if compromised. Thus we expect that the pairing procedure will involve a private-public key pair from both the secure enclave and the phone, and all future communication will be mutually authenticated. Since the firmware of the RFIC only has access to bluetooth packets, this mutual authentication guarantees that the RFIC being compromised should not be able to meaningfully impact security.&lt;br /&gt;
&lt;br /&gt;
====Physical Attacks Ignored====&lt;br /&gt;
We're not assuming that there's a scenario where you are interacting with the device and an attacker can do complex analysis while you're decrypting the store. It is assumed the following attacks are not feasible without cooperation of the owner of the SecuritySquid&lt;br /&gt;
* Differential power analysis - the power comes from the host computer and the control signals for the decryption come from the phone, so an attacker should be unable to competently evaluate because they will lack timing information and context&lt;br /&gt;
* Timing attacks - similar to differential power analysis, an attacker that controls the USB interface should be unable to trigger the large number of repeated decryptions to successfully pull this off&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=30</id>
		<title>ATA Design</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=30"/>
		<updated>2024-01-02T21:23:58Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about building an analog telephone adapter (ATA) which is wholly open-source and easily hack-able/adaptable to unusual use-cases (like payphones).&lt;br /&gt;
&lt;br /&gt;
== MCU/Processor Selection ==&lt;br /&gt;
There needs to be a main processor, and this section runs through my thoughts as I consider the available options.&lt;br /&gt;
&lt;br /&gt;
=== Linux-capable ===&lt;br /&gt;
Being Linux-capable would be nice! It's not a requirement because... well we don't need it!&lt;br /&gt;
&lt;br /&gt;
The big downsides to Linux-capability are:&lt;br /&gt;
* Complexity - these parts require a lot more support circuitry&lt;br /&gt;
* Availability - pre-made modules like the RaspberryPi are hard to get a hold of in reasonable quantities; cheaper linux-capable processors like Allwinner's stuff is hard to get from trustworthy sources like Digikey/Mouser&lt;br /&gt;
* Cost - these will be more expensive to manufacture and/or require more-expensive pre-made modules&lt;br /&gt;
* Real-time issues - making sure you get consistently paced DAC readings and push out consistent ADC updates may require extra support from the audio chipset&lt;br /&gt;
* GPIO limitations - we may need a separate low-power MCU to control the real-time bits/interface with higher-power domains as linux-capable MCUs generally don't have much GPIO strength&lt;br /&gt;
&lt;br /&gt;
Big upsides:&lt;br /&gt;
* Libraries - most of the software will be done for free, we'll basically be plugging lego blocks together for most of it&lt;br /&gt;
* Scriptability/hackability - people will be able to use/modify/add behaviors without recompiling firmware&lt;br /&gt;
* CPU power - if we need to run several encode/decode streams, pretty much everything linux-capable will be able to keep up&lt;br /&gt;
* Memory - pretty much every linux-capable setup will have more than enough RAM to run several SIP streams simultaneously&lt;br /&gt;
&lt;br /&gt;
For a quick rundown of the complexities of building a linux-capable system: https://jaycarlson.net/embedded-linux/&lt;br /&gt;
&lt;br /&gt;
=== Processor Capabilities ===&lt;br /&gt;
I'm making the decision up-front to ignore anything in the 8-bit or 16-bit category. While it may be possible to make it work, for a project I'm doing for fun, I don't want to spend my time hyper-optimizing just to get basic functionality working. This means I won't be looking at the Microchip PIC8/12/14/16/18, the Atmel Atmega line, or TI's MSP430. What it leaves on the table is: Arm (bunch of manufacturers), Microchip's dsPIC line, Risc-V, and the ESP32-variants using the Xtensa CPUs. There may be others, but this is all I'm considering to start, mostly because it's what I know!&lt;br /&gt;
&lt;br /&gt;
==== Connectivity ====&lt;br /&gt;
At a bare minimum, we'd like everything to have Ethernet. This is actually quite limiting! Things which still qualify:&lt;br /&gt;
* TI's ARM-R5 line and TMC129x line (Cortex-M4F)&lt;br /&gt;
* NXP has a few offerings in the LPC line, Kinetis/MK line, and the MIMXRT line&lt;br /&gt;
* Microchip/Atmel has a bunch of offerings - a number of ARM9 and Cortex-A5/A7 linux-capable units, and the ATSamE53x (Cortex-M4F, 120Mhz) and ATSamE7x (Cortex-M7, 300Mhz) lines&lt;br /&gt;
* Espressif currently only has the original ESP32 with ethernet, though for reasons described below, I'll keep the ESP32-S3 in the running as well&lt;br /&gt;
* Allwinner - I don't feel super confident evaluating these options, and so I've left them off&lt;br /&gt;
* RaspberryPi&lt;br /&gt;
* Beaglebone Black/Green&lt;br /&gt;
&lt;br /&gt;
It would be nice to have WiFi, but I couldn't find any options for this aside from the the ESP32. Any option could be paired with an ESP32-C3/ESP8266 to provide wifi.&lt;br /&gt;
&lt;br /&gt;
All options could be paired with something like an SPI-to-ethernet adapter. The esp-idf supports a number of such devices - https://github.com/espressif/esp-idf/blob/master/components/esp_eth/include/esp_eth_phy.h&lt;br /&gt;
&lt;br /&gt;
==== Decode/Encode ====&lt;br /&gt;
The MCU/Processor should be powerful enough to handle a few ports worth of real-time audio - this will require some benchmarking! I think this will disqualify most MCUs which don't have a FPU, but I am unsure.&lt;br /&gt;
&lt;br /&gt;
How powerful the MCU is sets which codecs we can support and how many FXS ports our ATA can handle.&lt;br /&gt;
&lt;br /&gt;
RAM utilization also needs to be tested - multiple concurrent encode/decode streams, along with SIP management will probably require a fair bit of memory.&lt;br /&gt;
&lt;br /&gt;
==== Audio input/Output ====&lt;br /&gt;
The MCU/Processor will either need a really good ADC and DAC per FXS port we support, or it will need to support interfaces which can run to DAC/ADC audio devices. This should probably mean I2S support, but I need to do a deeper dive on it.&lt;br /&gt;
&lt;br /&gt;
==== Ease of Assembly ====&lt;br /&gt;
When building these boards, it would be convenient to have an option which doesn't require complex soldering. This would effectively limit us to boards which have easy-to-utilize, cheap devboards - the beaglebone/raspberrypi (we would build this as a cape/hat), the teensy4 and the i.mxrt106x, or the ESP32 and its many variants. I'm not sure how strongly we should adhere to this idea.&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=29</id>
		<title>ATA Design</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=29"/>
		<updated>2024-01-02T21:14:44Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about building an analog telephone adapter (ATA) which is wholly open-source and easily hack-able/adaptable to unusual use-cases (like payphones).&lt;br /&gt;
&lt;br /&gt;
== MCU/Processor Selection ==&lt;br /&gt;
There needs to be a main processor, and this section runs through my thoughts as I consider the available options.&lt;br /&gt;
&lt;br /&gt;
=== Linux-capable ===&lt;br /&gt;
Being Linux-capable would be nice! It's not a requirement because... well we don't need it!&lt;br /&gt;
&lt;br /&gt;
The big downsides to Linux-capability are:&lt;br /&gt;
* Complexity - these parts require a lot more support circuitry&lt;br /&gt;
* Availability - pre-made modules like the RaspberryPi are hard to get a hold of in reasonable quantities; cheaper linux-capable processors like Allwinner's stuff is hard to get from trustworthy sources like Digikey/Mouser&lt;br /&gt;
* Cost - these will be more expensive to manufacture and/or require more-expensive pre-made modules&lt;br /&gt;
&lt;br /&gt;
Big upsides:&lt;br /&gt;
* Libraries - most of the software will be done for free, we'll basically be plugging lego blocks together for most of it&lt;br /&gt;
* Scriptability/hackability - people will be able to use/modify/add behaviors without recompiling firmware&lt;br /&gt;
* CPU power - if we need to run several encode/decode streams, pretty much everything linux-capable will be able to keep up&lt;br /&gt;
* Memory - pretty much every linux-capable setup will have more than enough RAM to run several SIP streams simultaneously&lt;br /&gt;
&lt;br /&gt;
For a quick rundown of the complexities of building a linux-capable system: https://jaycarlson.net/embedded-linux/&lt;br /&gt;
&lt;br /&gt;
=== Processor Capabilities ===&lt;br /&gt;
I'm making the decision up-front to ignore anything in the 8-bit or 16-bit category. While it may be possible to make it work, for a project I'm doing for fun, I don't want to spend my time hyper-optimizing just to get basic functionality working. This means I won't be looking at the Microchip PIC8/12/14/16/18, the Atmel Atmega line, or TI's MSP430. What it leaves on the table is: Arm (bunch of manufacturers), Microchip's dsPIC line, Risc-V, and the ESP32-variants using the Xtensa CPUs. There may be others, but this is all I'm considering to start, mostly because it's what I know!&lt;br /&gt;
&lt;br /&gt;
==== Connectivity ====&lt;br /&gt;
At a bare minimum, we'd like everything to have Ethernet. This is actually quite limiting! Things which still qualify:&lt;br /&gt;
* TI's ARM-R5 line and TMC129x line (Cortex-M4F)&lt;br /&gt;
* NXP has a few offerings in the LPC line, Kinetis/MK line, and the MIMXRT line&lt;br /&gt;
* Microchip/Atmel has a bunch of offerings - a number of ARM9 and Cortex-A5/A7 linux-capable units, and the ATSamE53x (Cortex-M4F, 120Mhz) and ATSamE7x (Cortex-M7, 300Mhz) lines&lt;br /&gt;
* Espressif currently only has the original ESP32 with ethernet, though for reasons described below, I'll keep the ESP32-S3 in the running as well&lt;br /&gt;
* Allwinner - I don't feel super confident evaluating these options, and so I've left them off&lt;br /&gt;
* RaspberryPi&lt;br /&gt;
* Beaglebone Black/Green&lt;br /&gt;
&lt;br /&gt;
It would be nice to have WiFi, but I couldn't find any options for this aside from the the ESP32. Any option could be paired with an ESP32-C3/ESP8266 to provide wifi.&lt;br /&gt;
&lt;br /&gt;
All options could be paired with something like an SPI-to-ethernet adapter. The esp-idf supports a number of such devices - https://github.com/espressif/esp-idf/blob/master/components/esp_eth/include/esp_eth_phy.h&lt;br /&gt;
&lt;br /&gt;
==== Decode/Encode ====&lt;br /&gt;
The MCU/Processor should be powerful enough to handle a few ports worth of real-time audio - this will require some benchmarking! I think this will disqualify most MCUs which don't have a FPU, but I am unsure.&lt;br /&gt;
&lt;br /&gt;
How powerful the MCU is sets which codecs we can support and how many FXS ports our ATA can handle.&lt;br /&gt;
&lt;br /&gt;
RAM utilization also needs to be tested - multiple concurrent encode/decode streams, along with SIP management will probably require a fair bit of memory.&lt;br /&gt;
&lt;br /&gt;
==== Audio input/Output ====&lt;br /&gt;
The MCU/Processor will either need a really good ADC and DAC per FXS port we support, or it will need to support interfaces which can run to DAC/ADC audio devices. This should probably mean I2S support, but I need to do a deeper dive on it.&lt;br /&gt;
&lt;br /&gt;
==== Ease of Assembly ====&lt;br /&gt;
When building these boards, it would be convenient to have an option which doesn't require complex soldering. This would effectively limit us to boards which have easy-to-utilize, cheap devboards - the beaglebone/raspberrypi (we would build this as a cape/hat), the teensy4 and the i.mxrt106x, or the ESP32 and its many variants. I'm not sure how strongly we should adhere to this idea.&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=28</id>
		<title>ATA Design</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=28"/>
		<updated>2024-01-02T20:32:46Z</updated>

		<summary type="html">&lt;p&gt;Kscz: /* Linux-capable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about building an analog telephone adapter (ATA) which is wholly open-source and easily hack-able/adaptable to unusual use-cases (like payphones).&lt;br /&gt;
&lt;br /&gt;
== MCU/Processor Selection ==&lt;br /&gt;
There needs to be a main processor, and this section runs through my thoughts as I consider the available options.&lt;br /&gt;
&lt;br /&gt;
=== Linux-capable ===&lt;br /&gt;
Being Linux-capable would be nice! It's not a requirement because... well we don't need it!&lt;br /&gt;
&lt;br /&gt;
The big downsides to Linux-capability are:&lt;br /&gt;
* Complexity - these parts require a lot more support circuitry&lt;br /&gt;
* Availability - pre-made modules like the RaspberryPi are hard to get a hold of in reasonable quantities; cheaper linux-capable processors like Allwinner's stuff is hard to get from trustworthy sources like Digikey/Mouser&lt;br /&gt;
* Cost - these will be more expensive to manufacture and/or require more-expensive pre-made modules&lt;br /&gt;
&lt;br /&gt;
Big upsides:&lt;br /&gt;
* Libraries - most of the software will be done for free, we'll basically be plugging lego blocks together for most of it&lt;br /&gt;
* Scriptability/hackability - people will be able to use/modify/add behaviors without recompiling firmware&lt;br /&gt;
* CPU power - if we need to run several encode/decode streams, pretty much everything linux-capable will be able to keep up&lt;br /&gt;
&lt;br /&gt;
=== Processor Capabilities ===&lt;br /&gt;
I'm making the decision up-front to ignore anything in the 8-bit or 16-bit category. While it may be possible to make it work, for a project I'm doing for fun, I don't want to spend my time hyper-optimizing just to get basic functionality working. This means I won't be looking at the Microchip PIC8/12/14/16/18, the Atmel Atmega line, or TI's MSP430. What it leaves on the table is: Arm (bunch of manufacturers), Microchip's dsPIC line, Risc-V, and the ESP32-variants using the Xtensa CPUs. There may be others, but this is all I'm considering to start, mostly because it's what I know!&lt;br /&gt;
&lt;br /&gt;
==== Connectivity ====&lt;br /&gt;
At a bare minimum, we'd like everything to have Ethernet. This is actually quite limiting! Things which still qualify:&lt;br /&gt;
* TI's ARM-R5 line and TMC129x line (Cortex-M4F)&lt;br /&gt;
* NXP has a few offerings in the LPC line, Kinetis/MK line, and the MIMXRT line&lt;br /&gt;
* Microchip/Atmel has a bunch of offerings - a number of ARM9 and Cortex-A5/A7 linux-capable units, and the ATSamE53x (Cortex-M4F, 120Mhz) and ATSamE7x (Cortex-M7, 300Mhz) lines&lt;br /&gt;
* Espressif currently only has the original ESP32 with ethernet, though for reasons described below, I'll keep the ESP32-S3 in the running as well&lt;br /&gt;
* Allwinner - I don't feel super confident evaluating these options, and so I've left them off&lt;br /&gt;
* RaspberryPi&lt;br /&gt;
* Beaglebone Black&lt;br /&gt;
&lt;br /&gt;
It would be nice to have WiFi, but I couldn't find any options for this aside from the the ESP32&lt;br /&gt;
&lt;br /&gt;
==== Decode/Encode =====&lt;br /&gt;
The MCU/Processor should be powerful enough&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=27</id>
		<title>ATA Design</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=27"/>
		<updated>2024-01-02T20:26:01Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about building an analog telephone adapter (ATA) which is wholly open-source and easily hack-able/adaptable to unusual use-cases (like payphones).&lt;br /&gt;
&lt;br /&gt;
== MCU/Processor Selection ==&lt;br /&gt;
There needs to be a main processor, and this section runs through my thoughts as I consider the available options.&lt;br /&gt;
&lt;br /&gt;
=== Linux-capable ===&lt;br /&gt;
Being Linux-capable would be nice! It's not a requirement because... well we don't need it!&lt;br /&gt;
&lt;br /&gt;
The big downsides to Linux-capability are:&lt;br /&gt;
* Complexity - these parts require a lot more support circuitry&lt;br /&gt;
* Availability - pre-made modules like the RaspberryPi are hard to get a hold of in reasonable quantities&lt;br /&gt;
* Cost - these will be more expensive to manufacture and/or require more-expensive pre-made modules&lt;br /&gt;
&lt;br /&gt;
Big upsides:&lt;br /&gt;
* Libraries - most of the software will be done for free, we'll basically be plugging lego blocks together for most of it&lt;br /&gt;
* Scriptability/hackability - people will be able to use/modify/add behaviors without recompiling firmware&lt;br /&gt;
&lt;br /&gt;
=== Processor Capabilities ===&lt;br /&gt;
I'm making the decision up-front to ignore anything in the 8-bit or 16-bit category. While it may be possible to make it work, for a project I'm doing for fun, I don't want to spend my time hyper-optimizing just to get basic functionality working. This means I won't be looking at the Microchip PIC8/12/14/16/18, the Atmel Atmega line, or TI's MSP430. What it leaves on the table is: Arm (bunch of manufacturers), Microchip's dsPIC line, Risc-V, and the ESP32-variants using the Xtensa CPUs. There may be others, but this is all I'm considering to start, mostly because it's what I know!&lt;br /&gt;
&lt;br /&gt;
==== Connectivity ====&lt;br /&gt;
At a bare minimum, we'd like everything to have Ethernet. This is actually quite limiting! Things which still qualify:&lt;br /&gt;
* TI's ARM-R5 line and TMC129x line (Cortex-M4F)&lt;br /&gt;
* NXP has a few offerings in the LPC line, Kinetis/MK line, and the MIMXRT line&lt;br /&gt;
* Microchip/Atmel has a bunch of offerings - a number of ARM9 and Cortex-A5/A7 linux-capable units, and the ATSamE53x (Cortex-M4F, 120Mhz) and ATSamE7x (Cortex-M7, 300Mhz) lines&lt;br /&gt;
* Espressif currently only has the original ESP32 with ethernet, though for reasons described below, I'll keep the ESP32-S3 in the running as well&lt;br /&gt;
* Allwinner - I don't feel super confident evaluating these options, and so I've left them off&lt;br /&gt;
* RaspberryPi&lt;br /&gt;
* Beaglebone Black&lt;br /&gt;
&lt;br /&gt;
It would be nice to have WiFi, but I couldn't find any options for this aside from the the ESP32&lt;br /&gt;
&lt;br /&gt;
==== Decode/Encode =====&lt;br /&gt;
The MCU/Processor should be powerful enough&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=26</id>
		<title>ATA Design</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=26"/>
		<updated>2024-01-02T17:03:22Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about building an analog telephone adapter (ATA) which is wholly open-source and easily hack-able/adaptable to unusual use-cases (like payphones).&lt;br /&gt;
&lt;br /&gt;
== MCU Selection ==&lt;br /&gt;
&lt;br /&gt;
There needs to be a main processor, and this section runs through my thoughts as I consider the available options.&lt;br /&gt;
&lt;br /&gt;
=== Processor Capabilities ===&lt;br /&gt;
&lt;br /&gt;
I'm making the decision up-front to ignore anything in the 8-bit or 16-bit category. While it may be possible to make it work, for a project I'm doing for fun, I don't want to spend my time hyper-optimizing just to get basic functionality working. This means I won't be looking at the Microchip PIC8/12/14/16/18, the Atmel Atmega line, or TI's MSP430. What it leaves on the table is: Arm (bunch of manufacturers), Microchip's dsPIC line, Risc-V, and the ESP32-variants using the Xtensa CPUs. There may be others, but this is all I'm considering to start, mostly because it's what I know!&lt;br /&gt;
&lt;br /&gt;
==== Connectivity ====&lt;br /&gt;
&lt;br /&gt;
At a bare minimum, we'd like everything to have Ethernet. This is actually quite limiting! Things which still qualify:&lt;br /&gt;
* TI's ARM-R5 line and TMC129x line (Cortex-M4F)&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=25</id>
		<title>ATA Design</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=ATA_Design&amp;diff=25"/>
		<updated>2024-01-02T17:02:43Z</updated>

		<summary type="html">&lt;p&gt;Kscz: Created page with &amp;quot;This page is about building an analog telephone adapter (ATA) which is wholly open-source and easily hack-able/adaptable to unusual use-cases (like payphones).  # MCU Selection  There needs to be a main processor, and this section runs through my thoughts as I consider the available options.  ## Processor Capabilities  I'm making the decision up-front to ignore anything in the 8-bit or 16-bit category. While it may be possible to make it work, for a project I'm doing for...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about building an analog telephone adapter (ATA) which is wholly open-source and easily hack-able/adaptable to unusual use-cases (like payphones).&lt;br /&gt;
&lt;br /&gt;
# MCU Selection&lt;br /&gt;
&lt;br /&gt;
There needs to be a main processor, and this section runs through my thoughts as I consider the available options.&lt;br /&gt;
&lt;br /&gt;
## Processor Capabilities&lt;br /&gt;
&lt;br /&gt;
I'm making the decision up-front to ignore anything in the 8-bit or 16-bit category. While it may be possible to make it work, for a project I'm doing for fun, I don't want to spend my time hyper-optimizing just to get basic functionality working. This means I won't be looking at the Microchip PIC8/12/14/16/18, the Atmel Atmega line, or TI's MSP430. What it leaves on the table is: Arm (bunch of manufacturers), Microchip's dsPIC line, Risc-V, and the ESP32-variants using the Xtensa CPUs. There may be others, but this is all I'm considering to start, mostly because it's what I know!&lt;br /&gt;
&lt;br /&gt;
### Connectivity&lt;br /&gt;
&lt;br /&gt;
At a bare minimum, we'd like everything to have Ethernet. This is actually quite limiting! Things which still qualify:&lt;br /&gt;
* TI's ARM-R5 line and TMC129x line (Cortex-M4F)&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=24</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=24"/>
		<updated>2023-01-21T00:35:24Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
While there are many details to how the system will be setup, the picture provides a very rough, high level design. Essentially, the system is comprised of 4 main components:&lt;br /&gt;
* an IC which serves as effectively a UART to BLE bridge - this is how the squid will talk to the phone&lt;br /&gt;
* a small (4MB?) flash chip which will hold the encrypted password database&lt;br /&gt;
* a secure enclave - probably the atecc608b - holds the key that can decrypt the password database&lt;br /&gt;
* an IC which will serve as the primary compute unit - its job is to interact with the backing storage, secure enclave, and BLE bridge to provide the main functionality&lt;br /&gt;
&lt;br /&gt;
[[File:Security Squid High-level HW Architechture.png]]&lt;br /&gt;
&lt;br /&gt;
===Secret Storage===&lt;br /&gt;
* In an ideal world, we will hold as few secrets as possible - the user should provide the keys and that unlocks everything&lt;br /&gt;
* Strong enough keys to survive storage at rest cannot reasonably be derived from user input - look to how whole disk encryption works on linux: user password decrypts on-disk key; on disk key is what the data is '''actually''' encrypted with&lt;br /&gt;
&lt;br /&gt;
==Security Model==&lt;br /&gt;
&lt;br /&gt;
===Threat Model: External Interfaces===&lt;br /&gt;
There are 2 external interfaces we need to defend: USB to the host PC, and BLE to the phone.&lt;br /&gt;
&lt;br /&gt;
The USB handling will be important to make sure that parsing failures and other sources of error don't lead to device compromise, but ideally we can use something like Rust to write the USB stack and avoid the majority of the types of bugs one might encounter writing a parser - we can crash the application on failures because a DDoS to the device is acceptable if we reveal no secrets.&lt;br /&gt;
&lt;br /&gt;
The bluetooth interface is more complicated - the bluetooth stacks on the market are generally considered not secure, and so we would prefer to have any interface which touches bluetooth to be insulated from the Vault Manager IC (VMIC). To this end, we will have a second SoC which manages bluetooth called the RFIC. The VMIC will interface via a simple serial (UART) protocol, which will feature both a command and control (C&amp;amp;C) protocol as well as a data pass-through protocol.  During regular operation, the UI Device/Phone will negotiate a secure channel with the VMIC, and the RFIC will simply see an encrypted packets which it will have no comprehension of the contents.&lt;br /&gt;
&lt;br /&gt;
===Threat Model: Physical Access===&lt;br /&gt;
If you drop the device, someone who has prolonged physical access should not be able to access the stored passwords either by using the device nor accessing the underlying hardware. This leads to a number of different scenarios we need to defend against.&lt;br /&gt;
&lt;br /&gt;
The first is that the data at rest has to be encrypted, and someone who gains access to that data should not be able to dump the data and access it. Much like whole disk encryption, we'll have both a data encryption key (DEK) and a key encryption key (KEK). Ideally, the data should not be brute-force decryptable in a reasonable timeframe - normally, this would be achieved by using something like an aggressive number of PBKDF2 rounds, but the VMIC will not have enough compute power to make this plausible when comparing against the hashing power of a modern CPU/GPU.  Because of this, we store the DEK inside a secure enclave, which can only be accessed through I2C. We will take the user input, pass it through PBKDF2 for a number of rounds, then use that as the KEK to request that the secure enclave reveal the DEK. Because the only mechanism to confirm a guess of the KEK is through the secure enclave IC, an attacker's hashing capability is rendered nearly meaningless.&lt;br /&gt;
&lt;br /&gt;
The next big threats relate to firmware/IC replacement attacks - assuming that the device firmware is possible to update, we act as if the device is possible to erase. Most devices allow for the entire device to be erased and reprogrammed, even when the flash is &amp;quot;locked.&amp;quot; Ideally, we should be able to make the device inoperable if this happens, by pairing some key between the secure enclave and the VMIC flash.  Thus, proper updates should be able to selectively erase flash sections and hostile flashes should be unable to maintain the secret in flash.&lt;br /&gt;
&lt;br /&gt;
A similar mechanism is necessary for RFIC firmware replacement - the Secure Enclave and the Phone/UI Device need to be paired such that the RFIC cannot interfere, even if compromised. Thus we expect that the pairing procedure will involve a private-public key pair from both the secure enclave and the phone, and all future communication will be mutually authenticated. Since the firmware of the RFIC only has access to bluetooth packets, this mutual authentication guarantees that the RFIC being compromised should not be able to meaningfully impact security.&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=23</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=23"/>
		<updated>2023-01-21T00:08:22Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
While there are many details to how the system will be setup, the picture provides a very rough, high level design. Essentially, the system is comprised of 4 main components:&lt;br /&gt;
* an IC which serves as effectively a UART to BLE bridge - this is how the squid will talk to the phone&lt;br /&gt;
* a small (4MB?) flash chip which will hold the encrypted password database&lt;br /&gt;
* a secure enclave - probably the atecc608b - holds the key that can decrypt the password database&lt;br /&gt;
* an IC which will serve as the primary compute unit - its job is to interact with the backing storage, secure enclave, and BLE bridge to provide the main functionality&lt;br /&gt;
&lt;br /&gt;
[[File:Security Squid High-level HW Architechture.png]]&lt;br /&gt;
&lt;br /&gt;
===Secret Storage===&lt;br /&gt;
* In an ideal world, we will hold as few secrets as possible - the user should provide the keys and that unlocks everything&lt;br /&gt;
* Strong enough keys to survive storage at rest cannot reasonably be derived from user input - look to how whole disk encryption works on linux: user password decrypts on-disk key; on disk key is what the data is '''actually''' encrypted with&lt;br /&gt;
&lt;br /&gt;
==Security Model==&lt;br /&gt;
&lt;br /&gt;
===Threat Model: External Interfaces===&lt;br /&gt;
There are 2 external interfaces we need to defend: USB to the host PC, and BLE to the phone.&lt;br /&gt;
&lt;br /&gt;
The USB handling will be important to make sure that parsing failures and other sources of error don't lead to device compromise, but ideally we can use something like Rust to write the USB stack and avoid the majority of the types of bugs one might encounter writing a parser - we can crash the application on failures because a DDoS to the device is acceptable if we reveal no secrets.&lt;br /&gt;
&lt;br /&gt;
The bluetooth interface is more complicated - the bluetooth stacks on the market are generally considered not secure, and so we would prefer to have any interface which touches bluetooth to be insulated from the Vault Manager IC (VMIC). To this end, we will have a second SoC which manages bluetooth called the RFIC. The VMIC will interface via a simple serial (UART) protocol, which will feature both a command and control (C&amp;amp;C) protocol as well as a data pass-through protocol.  During regular operation, the UI Device/Phone will negotiate a secure channel with the VMIC, and the RFIC will simply see an encrypted packets which it will have no comprehension of the contents.&lt;br /&gt;
&lt;br /&gt;
===Threat Model: Physical Access===&lt;br /&gt;
If you drop the device, someone who has prolonged physical access should not be able to access the stored passwords either by using the device nor accessing the underlying hardware. This leads to a number of different scenarios we need to defend against.&lt;br /&gt;
&lt;br /&gt;
The first is that the data at rest has to be encrypted, and someone who gains access to that data should not be able to dump the data and access it. Much like whole disk encryption, we'll have both a data encryption key (DEK) and a key encryption key (KEK). Ideally, the data should not be brute-force decryptable in a reasonable timeframe - normally, this would be achieved by using something like an aggressive number of PBKDF2 rounds, but the VMIC will not have enough compute power to make this plausible when comparing against the hashing power of a modern CPU/GPU.  Because of this, we store the DEK inside a secure enclave, which can only be accessed through I2C. We will take the user input, pass it through PBKDF2 for a number of rounds, then use that as the KEK to request that the secure enclave reveal the DEK. Because the only mechanism to confirm a guess of the KEK is through the secure enclave IC, an attacker's hashing capability is rendered nearly meaningless.&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=File:Security_Squid_High-level_HW_Architechture.png&amp;diff=22</id>
		<title>File:Security Squid High-level HW Architechture.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=File:Security_Squid_High-level_HW_Architechture.png&amp;diff=22"/>
		<updated>2023-01-20T23:34:29Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;a basic overview of the Security Squid hw-architecture&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Main_Page&amp;diff=21</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Main_Page&amp;diff=21"/>
		<updated>2023-01-20T07:22:13Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is Kit's Personal wiki for collaborating on projects and having a place to dump thoughts.&lt;br /&gt;
&lt;br /&gt;
== Security Squid ==&lt;br /&gt;
* [https://wiki.h5yy.com/mediawiki/index.php/Security_Squid Security Squid]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=19</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=19"/>
		<updated>2023-01-12T20:00:36Z</updated>

		<summary type="html">&lt;p&gt;Kscz: /* Rough Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
While there are many details to how the system will be setup, the picture provides a very rough, high level design. Essentially, the system is comprised of 4 main components:&lt;br /&gt;
* an IC which serves as effectively a UART to BLE bridge - this is how the squid will talk to the phone&lt;br /&gt;
* a small (4MB?) flash chip which will hold the encrypted password database&lt;br /&gt;
* a secure enclave - probably the atecc608b - holds the key that can decrypt the password database&lt;br /&gt;
* an IC which will serve as the primary compute unit - its job is to interact with the backing storage, secure enclave, and BLE bridge to provide the main functionality&lt;br /&gt;
&lt;br /&gt;
[[File:Security squid scribbles.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===Secret Storage===&lt;br /&gt;
* In an ideal world, we will hold as few secrets as possible - the user should provide the keys and that unlocks everything&lt;br /&gt;
* Strong enough keys to survive storage at rest cannot reasonably be derived from user input - look to how whole disk encryption works on linux: user password decrypts on-disk key; on disk key is what the data is '''actually''' encrypted with&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=18</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=18"/>
		<updated>2023-01-12T19:47:38Z</updated>

		<summary type="html">&lt;p&gt;Kscz: /* Rough Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
[[File:Security squid scribbles.png|frame]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=17</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=17"/>
		<updated>2023-01-12T19:47:07Z</updated>

		<summary type="html">&lt;p&gt;Kscz: /* Rough Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
[[File:Security squid scribbles.png|10%px|thumb]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=16</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=16"/>
		<updated>2023-01-12T19:46:53Z</updated>

		<summary type="html">&lt;p&gt;Kscz: /* Rough Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
[[File:Security squid scribbles.png|10%px]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=15</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=15"/>
		<updated>2023-01-12T19:46:41Z</updated>

		<summary type="html">&lt;p&gt;Kscz: /* Rough Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
[[File:Security squid scribbles.png|30%px]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=14</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=14"/>
		<updated>2023-01-12T19:46:28Z</updated>

		<summary type="html">&lt;p&gt;Kscz: /* Rough Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
[[File:Security squid scribbles.png|50%px|frame]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=13</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=13"/>
		<updated>2023-01-12T19:45:19Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
[[File:Security squid scribbles.png]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=12</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=12"/>
		<updated>2023-01-12T19:45:06Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
===Rough Architecture===&lt;br /&gt;
[[File:Security squid scribbles.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=File:Security_squid_scribbles.png&amp;diff=11</id>
		<title>File:Security squid scribbles.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=File:Security_squid_scribbles.png&amp;diff=11"/>
		<updated>2023-01-12T19:44:53Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A very basic, high level security squid &amp;quot;architecture&amp;quot;&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=10</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=10"/>
		<updated>2023-01-05T07:54:40Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;br /&gt;
&lt;br /&gt;
[[File:Pip unsure scaled.jpg|thumb]]&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=File:Pip_unsure_scaled.jpg&amp;diff=9</id>
		<title>File:Pip unsure scaled.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=File:Pip_unsure_scaled.jpg&amp;diff=9"/>
		<updated>2023-01-05T07:54:28Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is a photo of pip the dog as a puppy&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=8</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=8"/>
		<updated>2022-12-26T17:36:30Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
* If I go to a friend's house and want to use one of my passwords on their computer (e.g. log into netflix), I don't want their computer to have access to my complete password vault, even temporarily!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
* If I want to use one of my passwords on a friend's computer, I don't want to have them install software&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=7</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=7"/>
		<updated>2022-12-26T17:10:05Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps backup deltas could be done wirelessly&lt;br /&gt;
* Your cellphone should be able to receive the names of the websites and usernames, but *never* the passwords - the user should be able to send usernames and passwords to save in the vault, but should only be able to retrieve them via the keyboard interface&lt;br /&gt;
&lt;br /&gt;
===On Backups===&lt;br /&gt;
* it has to be easy to back up your password vault, and it has to be encouraged automagically&lt;br /&gt;
* the backup can be &amp;quot;always online,&amp;quot; so long as it's defended by something like a secure memory chip&lt;br /&gt;
* perhaps there should be a separate backup device?&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=6</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=6"/>
		<updated>2022-12-26T16:53:57Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;br /&gt;
&lt;br /&gt;
===On Interfaces/Connections===&lt;br /&gt;
* Interfaces are generally where things like overflow vulnerabilities and breaks in your security model come from - parsing and translating untrusted input. As much possible, avoid having the secure domain (e.g. the SoC managing the passwords) interact directly with untrusted inputs (e.g. the host computer and/or cellphone)&lt;br /&gt;
* Bluetooth is notorious for having vulnerabilities - do not have integrated bluetooth on the IC which has direct contact with the password vault&lt;br /&gt;
* The flow of information should be as uni-directional as possible - there should be no way to exfiltrate the data through the wireless interface, or if a BLE keyboard interface is selected as necessary for UX, every password transmission should be confirmed with physical contact&lt;br /&gt;
* Backing up the entire password vault should only be possible via USB - though perhaps deltas could be done wirelessly&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=5</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=5"/>
		<updated>2022-12-26T15:50:16Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;br /&gt;
* The more unique steps or equipment your UX requires, the less likely it is to be used&lt;br /&gt;
* Displays and convenient UX are expensive to create - the bigger your display and device, the easier it is to make a good UX - this is why security squid is offloading to your cellphone as much as possible: security squid wants to be small!&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=4</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=4"/>
		<updated>2022-12-26T04:54:08Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Brainstorming==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;br /&gt;
&lt;br /&gt;
===On Passwords===&lt;br /&gt;
* Passwords are a good mechanism for security compared to other choices!&lt;br /&gt;
* Every password should be strong&lt;br /&gt;
* Every password should be unique per usecase (e.g. one password per website/host/etc) - this is generally solved through use of a password manager, security squid should be no different!&lt;br /&gt;
* Passwords can be shared - note this is a positive and a negative! For users, being able to share a password can be helpful - I don't care if my friend knows my password to some random pizza shop, and I might actively want to share netflix (or similar) passwords. For owners of websites like netflix where users sharing passwords directly impacts revenue, this is a negative&lt;br /&gt;
* Passwords separate out who a user is from what a user knows - this also has positives and negatives: for users, it means they can do things like have many concurrent accounts since their identity isn't linked to their account security&lt;br /&gt;
* Passwords can be backed up - this is in contrast to something like u2f&lt;br /&gt;
* Passwords can be changed cheaply&lt;br /&gt;
* Providing a password doesn't involve sharing additional, hard-to-change personal info - I don't want to provide a cell phone number to every website!&lt;br /&gt;
&lt;br /&gt;
===On UX===&lt;br /&gt;
* Every security mechanism is only as good as its UX - very secure things which have a terrible UX will be ignored or bypassed&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=3</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=3"/>
		<updated>2022-12-26T04:00:41Z</updated>

		<summary type="html">&lt;p&gt;Kscz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Squid is the name for a hardware-based password manager inspired by [https://www.themooltipass.com/ the mooltipass] hardware security manager, but with a set of different design goals which diverged from the final mooltipass products. It essentially imagines the same core functionality but with a very different set of goals regarding some aspects of security and all of the UX.&lt;br /&gt;
&lt;br /&gt;
==Design Basis==&lt;br /&gt;
In no particular order, here is a set of things which are important to security squid:&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
	<entry>
		<id>http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=2</id>
		<title>Security Squid</title>
		<link rel="alternate" type="text/html" href="http://wiki.h5yy.com/mediawiki/index.php?title=Security_Squid&amp;diff=2"/>
		<updated>2022-12-26T03:43:12Z</updated>

		<summary type="html">&lt;p&gt;Kscz: Created page with &amp;quot;Security Squid is my name for a project!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Squid is my name for a project!&lt;/div&gt;</summary>
		<author><name>Kscz</name></author>
	</entry>
</feed>