crossfire/README.md

79 lines
3.3 KiB
Markdown

<!--
crossfire: distributed brute force infrastructure
Copyright (C) 2020 haskal
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
# crossfire
distributed brute force infrastructure
takes the difficulty out of creating custom brute force jobs
## status
### base
- 🚧 input space manipulation functions
- ✅ data types: using data/integer-set, pattern (vector of integer-set)
- ✅ basic manipulation functions
- ✅ representation of input space as a flat integer
- 🚧 #lang for configuration/definitions
- (input) mode
- stdio: user program gets input by stdio, integers separated by space, one per line
- callback: input generator compiled into user program, user main calls `crossfire_main`
with callback function that returns true or false
- other modes??
- SMP: performed by crossfire or performed by the user code
- "performed by user code" can also mean GPU, for example
- 🚧 codegen for input generator (in C)
- ✅ stdio mode
- 🚧 callback mode
- success reporting mechanism
- low priority: configurable "character" type -- currently a "character" is a uint64\_t
### server: distribute jobs to workers
- ✅ base definitions of input classes and how to divide them
- ✅ dynamic slicing and scheduling based on agents' reported work rate
- low priority: randomized input space distribution
- low priority: store common configuration templates for clients
- low priority: track upload/download progress
- streaming interface for file transfers
- ✅ accept submitted projects (with client-compiled input generator) and distribute to agents
- ✅ low priority: support for multiple architectures
- ✅ agent authentication
- ✅ client authentication
# agent: accept and run jobs
- ✅ securely connect to server
- retrieve assigned tasks
- report number of cores available (configurable limit)
- report work rate
- report successes
- low priority: defer to external brute force program (eg, hashcat on GPU)
- low priority: support finding _all_ matching inputs for a project, rather than just the first one
# client: submit jobs and view progress
- ✅securely connect to server
- command line interface
- `crossfire new`: create new crossfire project
- `crossfire test`: test project locally, replicates configuration of server with single local
agent to debug issues
- low priority: `crossfire node-test`: submit a mini-task to a node that has the necessary
resources to debug issues
- `crossfire submit`: submit task to server
- `crossfire cancel`: cancels submitted task
- `crossfire status`: check status of task (or network as a whole)
- low priority: gui interface (racket/gui & framework time)