Skip to content

Latest commit

 

History

History
122 lines (85 loc) · 8.06 KB

File metadata and controls

122 lines (85 loc) · 8.06 KB
SecRandom

SecRandom

A random-selection tool for classrooms and teams, with configurable workflows, managed history, and verifiable draw records.

GitHub Issues Latest Release Pre-release Last Update Downloads

QQ Group Bilibili License: GPL v3

Language [ 简体中文 | English | 日本語 ]

Note

SecRandom is released under GNU GPLv3. You may modify and redistribute the source, but derivative redistributions must also use GNU GPLv3.

SecRandom

SecRandom is a fair random-selection application for classrooms, teams, events, decision-making, and other scenarios.

Features

Draw workflows

  • Roll call: Supports standard random, history-balanced, and repeat-control draws.
  • Quick draw: Quickly draws students through a standalone floating window.
  • Lottery: Supports prize-wheel and inventory draws, with students and prizes managed independently.
  • Rich presentation: Provides unified settings for animation, results, speech, music, and notifications, with fallback when a notification fails.

Fairness and list management

  • Dynamically adjusts weights using history count, draw interval, group, gender, and other factors to reduce repeats and distribution imbalance.
  • Uses stable internal identifiers to preserve history; student numbers, IDs, and names are display information only.
  • Supports multiple student lists, prize pools, and .xlsx, .xls, .csv import, mapping, and preview.
  • Saves history for every draw round for convenient review.

Reviewable draw results

  • Every draw automatically saves a proof record file.
  • You can choose to involve the server in and witness the draw process.
  • Draw results can be checked again through official channels.

Data, privacy, and security

  • Settings, lists, and history can all be imported, exported, backed up, and restored.
  • Backups may include lists, history, draw proofs, images, and audio, but never passwords or other security information.
  • Password, TOTP, or USB-drive protection can secure important operations, and you can choose which operations require verification.

Verification boundaries

Mode What it can do What it cannot prove
Offline proof Review a completed draw process; later edits, deletions, and a wiped-and-rebuilt chain are all detectable It cannot prove that the local program, random seed, or roster was unchanged before the draw, nor rule out repeated trials and selection before it
Online witnessing Protect the draw flow after the server locks it It cannot prove that the roster is authentic, complete, or unfiltered before submission

Notes:

  • Every draw saves a locally replayable proof immediately and submits that same proof for server replay signing; its digest also goes to a third-party time-stamp authority (the digest only — never the roster or the draw content)
  • Local proofs form an append-only hash chain, so deleting or rewriting one leaves a gap; the service remembers the chain head it has seen for each device, so wiping local proofs and rebuilding the chain is reported as a backwards chain position
  • A proof commits a digest of the "record id to name/number/group" mapping of the roster it used, so editing the list after the draw to point a winning record at someone else is detectable
  • Filtering the roster before the draw (deleting or disabling a student first) cannot be proven: the digest only covers the roster as it stood at draw time. Covering that would need a "confirm the roster with a third party before drawing" flow, which is not implemented

Technical evolution

Version Stack Stage
v1 Python + PyQt5 + qfluentwidgets First desktop implementation
v2 Python + PySide6 + qfluentwidgets Qt stack evolution
v3 C# + Avalonia + FluentAvalonia .NET desktop rewrite for continued draw, verification, and desktop-integration development

Download and updates

  • GitHub Releases provides release packages and change notes.
  • The official download page provides the latest download entry point.
  • Automatic updates validate a signed release manifest and artifact length/hash before deployment. Refer to the package and notes supplied with each release for installation details.

License and third-party notices

  • SecRandom is released under GNU GPLv3.
  • See THIRD-PARTY-NOTICES.md for third-party components, copyright information, and distribution-review notes.
  • History-balanced weights and candidate filters help reduce repeat selections and improve long-term distribution. They do not replace management of real-world rosters, rules, or processes, and SecRandom does not claim to verify those conditions.

Contributors and special thanks

SecRandom contributors

Thank you to everyone who contributes code, reports issues, improves documentation, or provides feedback. The avatars are generated from GitHub contributor data; select them to open the GitHub contributors page for complete statistics.

Support and community

Star History

Star History Chart

Copyright © 2025-2026 SECTL