|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: Frequently Asked Questions |
| 4 | +description: Answers to common questions about IPCrypt, its implementation, and use cases. |
| 5 | +permalink: /faq/ |
| 6 | +--- |
| 7 | + |
| 8 | +# Frequently Asked Questions |
| 9 | + |
| 10 | +This page provides answers to common questions about IPCrypt, its implementation, and use cases. |
| 11 | + |
| 12 | +## General Questions |
| 13 | + |
| 14 | +### What is IPCrypt? |
| 15 | + |
| 16 | +IPCrypt is a specification that defines well-defined methods for encrypting and obfuscating IP addresses. It provides both deterministic format-preserving and non-deterministic constructions that apply uniformly to both IPv4 and IPv6 addresses. |
| 17 | + |
| 18 | +### Why was IPCrypt created? |
| 19 | + |
| 20 | +IPCrypt was developed to address privacy concerns raised in [RFC6973](https://datatracker.ietf.org/doc/html/rfc6973) and [RFC7258](https://datatracker.ietf.org/doc/html/rfc7258) regarding pervasive monitoring and data collection, while maintaining the operational utility of IP addresses in network operations and analytics. |
| 21 | + |
| 22 | +### Is IPCrypt a standard? |
| 23 | + |
| 24 | +IPCrypt is currently a proposed solution, not yet a standardized protocol. It is being developed as an IETF Internet-Draft with the goal of providing a consistent approach to IP address encryption and obfuscation. |
| 25 | + |
| 26 | +### How does IPCrypt differ from other IP address anonymization techniques? |
| 27 | + |
| 28 | +Unlike ad-hoc mechanisms like simple hashing, truncation, or tokenization, IPCrypt provides: |
| 29 | +- Cryptographically sound methods with known security properties |
| 30 | +- Consistent implementation across different platforms |
| 31 | +- Format preservation when needed |
| 32 | +- Correlation protection through non-deterministic modes |
| 33 | +- Full invertibility (ability to decrypt) |
| 34 | +- Comprehensive documentation |
| 35 | + |
| 36 | +## Technical Questions |
| 37 | + |
| 38 | +### What encryption modes does IPCrypt support? |
| 39 | + |
| 40 | +IPCrypt supports three encryption modes: |
| 41 | + |
| 42 | +1. **ipcrypt-deterministic**: Format-preserving encryption using AES-128 that always produces the same output for the same input and key. |
| 43 | +2. **ipcrypt-nd**: Non-deterministic encryption using KIASU-BC with an 8-byte tweak, producing a 24-byte output. |
| 44 | +3. **ipcrypt-ndx**: Non-deterministic encryption using AES-XTS with a 16-byte tweak, producing a 32-byte output. |
| 45 | + |
| 46 | +### How does the deterministic mode preserve IP address format? |
| 47 | + |
| 48 | +The deterministic mode uses AES-128 in a single-block operation to encrypt the IP address. The result is then converted back to an IP address format, preserving the structure while changing the actual values. |
| 49 | + |
| 50 | +### Can IPCrypt handle both IPv4 and IPv6 addresses? |
| 51 | + |
| 52 | +Yes, IPCrypt operates by converting both IPv4 and IPv6 addresses to a standard 16-byte representation before encryption, allowing it to handle both address types uniformly. |
| 53 | + |
| 54 | +### What key size does IPCrypt use? |
| 55 | + |
| 56 | +IPCrypt uses a 128-bit (16-byte) key for all encryption modes. |
| 57 | + |
| 58 | +### How secure is IPCrypt? |
| 59 | + |
| 60 | +IPCrypt relies on established cryptographic primitives like AES-128 and AES-XTS, which have been extensively analyzed and are widely trusted. The security of IPCrypt depends on the security of these underlying primitives and proper key management. |
| 61 | + |
| 62 | +## Implementation Questions |
| 63 | + |
| 64 | +### What programming languages have IPCrypt implementations? |
| 65 | + |
| 66 | +IPCrypt has been implemented in multiple programming languages, including: |
| 67 | +- Python |
| 68 | +- C |
| 69 | +- Rust |
| 70 | +- JavaScript |
| 71 | +- Go |
| 72 | +- Zig |
| 73 | +- PHP |
| 74 | +- D |
| 75 | + |
| 76 | +### How do I install IPCrypt? |
| 77 | + |
| 78 | +Installation depends on the programming language you're using. For example: |
| 79 | +- Python: `pip install ipcrypt` |
| 80 | +- JavaScript: `npm install ipcrypt` |
| 81 | +- Rust: `cargo add ipcrypt-rs` |
| 82 | +- Go: `go get github.com/jedisct1/go-ipcrypt` |
| 83 | + |
| 84 | +For other languages, see the [Implementations](/implementations/) page. |
| 85 | + |
| 86 | +### Are all implementations compatible with each other? |
| 87 | + |
| 88 | +Yes, all implementations follow the same specification and produce identical results for the same inputs. This ensures interoperability across different programming languages and platforms. |
| 89 | + |
| 90 | +### How do I generate a secure key for IPCrypt? |
| 91 | + |
| 92 | +You should use a cryptographically secure random number generator to create a 16-byte key. For example: |
| 93 | + |
| 94 | +```python |
| 95 | +import os |
| 96 | +key = os.urandom(16) |
| 97 | +``` |
| 98 | + |
| 99 | +Never use predictable keys or hardcoded values in production environments. |
| 100 | + |
| 101 | +## Use Case Questions |
| 102 | + |
| 103 | +### When should I use the deterministic mode? |
| 104 | + |
| 105 | +Use the deterministic mode when: |
| 106 | +- You need to preserve the IP address format |
| 107 | +- You need to perform lookups or joins on the encrypted addresses |
| 108 | +- Correlation between datasets is acceptable for your use case |
| 109 | + |
| 110 | +### When should I use the non-deterministic modes? |
| 111 | + |
| 112 | +Use the non-deterministic modes when: |
| 113 | +- Format preservation is not required |
| 114 | +- You need to prevent correlation between different datasets |
| 115 | +- Maximum privacy protection is required |
| 116 | + |
| 117 | +### Can IPCrypt be used for GDPR compliance? |
| 118 | + |
| 119 | +IPCrypt can be part of a GDPR compliance strategy by helping to pseudonymize IP addresses. However, encryption alone may not be sufficient for full compliance, and you should consult with legal experts for your specific situation. |
| 120 | + |
| 121 | +### Is IPCrypt suitable for logging applications? |
| 122 | + |
| 123 | +Yes, IPCrypt is well-suited for logging applications where you want to: |
| 124 | +- Count unique clients |
| 125 | +- Implement rate limiting |
| 126 | +- Analyze traffic patterns |
| 127 | +- All without exposing actual IP addresses |
| 128 | + |
| 129 | +### Can IPCrypt be used with existing systems? |
| 130 | + |
| 131 | +IPCrypt can be integrated with existing systems through various methods: |
| 132 | +- As a preprocessing step before storing data |
| 133 | +- As a middleware component in data processing pipelines |
| 134 | +- As a library integrated directly into applications |
| 135 | +- As a service that other applications can call |
| 136 | + |
| 137 | +## Performance Questions |
| 138 | + |
| 139 | +### How fast is IPCrypt? |
| 140 | + |
| 141 | +IPCrypt is designed to be efficient, with performance primarily dependent on the underlying AES implementation. High-performance implementations like the C version can process millions of IP addresses per second on modern hardware. |
| 142 | + |
| 143 | +### Does IPCrypt have any memory requirements? |
| 144 | + |
| 145 | +IPCrypt has minimal memory requirements, typically just a few kilobytes for the implementation and key storage. |
| 146 | + |
| 147 | +### Can IPCrypt be used in high-throughput environments? |
| 148 | + |
| 149 | +Yes, IPCrypt is suitable for high-throughput environments like logging systems, CDNs, and traffic analyzers. The deterministic mode is particularly efficient for these use cases. |
| 150 | + |
| 151 | +## Getting Help |
| 152 | + |
| 153 | +### Where can I report issues or ask questions? |
| 154 | + |
| 155 | +You can report issues or ask questions on the [GitHub repository]({{ site.github_repo }}/issues). |
| 156 | + |
| 157 | +### How can I contribute to IPCrypt? |
| 158 | + |
| 159 | +You can contribute to IPCrypt by: |
| 160 | +- Implementing it in additional programming languages |
| 161 | +- Improving existing implementations |
| 162 | +- Reporting bugs or suggesting enhancements |
| 163 | +- Helping with documentation |
| 164 | +- Sharing your use cases and experiences |
| 165 | + |
| 166 | +See the [Community](/community/) page for more information. |
| 167 | + |
| 168 | +### Where can I find more resources? |
| 169 | + |
| 170 | +Check out the [Resources](/resources/) page for additional documentation, guides, and examples. |
0 commit comments